คำอธิบายปัญหา
สมมติว่าเรามีตัวเลข 2 ตัว a และ b เราต้องนิยามฟังก์ชันที่คำนวณ (a + b) และ (a - b) พร้อมกัน แต่ฟังก์ชันใน C คืนค่าได้สูงสุด 1 ค่า เพื่อคืนค่าหลายค่า เราใช้ Output Parameters ผ่าน Pointer โดยส่งที่อยู่ของตัวแปรเข้าไป ฟังก์ชันจะอัปเดต a เป็น a+b และ b เป็น a-b
ตัวอย่าง
หากอินพุตเป็น a = 5, b = 8 ผลลัพธ์จะเป็น a + b = 13 และ a - b = -3
ขั้นตอนการแก้ปัญหา
- นิยามฟังก์ชัน solve() รับที่อยู่ของ a และ b (int *a, int *b)
- คำนวณ temp = *a + *b (เก็บผลรวมไว้ชั่วคราว)
- อัปเดต *b = *a - *b (ผลต่าง)
- อัปเดต *a = temp (ผลรวม)
โค้ดตัวอย่าง
#include <stdio.h>
void solve(int *a, int *b) {
int temp = *a + *b;
*b = *a - *b;
*a = temp;
}
int main() {
int a = 5, b = 8;
solve(&a, &b);
printf("a + b = %d and a - b = %d", a, b);
return 0;
}
อินพุต
a = 5, b = 8
เอาต์พุต
a + b = 13 and a - b = -3