ใน C ไม่สามารถส่งอาเรย์แบบ Pass by Value ตรงๆ ได้ (Array Decays to Pointer) แต่ตัวอย่างนี้แสดงการส่งอาเรย์ไปฟังก์ชัน (จริงๆ คือ Pass Pointer)
ตัวอย่างโค้ด
#include <stdio.h>
float avg(float a[]) {
int i;
float avg, sum = 0.0;
for (i = 0; i < 6; ++i)
sum += a[i];
avg = (sum / 6);
return avg;
}
int main() {
float avg1, a[] = {63, 21, 34.4, 12.5, 3, 2.2};
avg1 = avg(a);
printf("Average : %f", avg1);
return 0;
}
ผลลัพธ์
Average : 22.683332
คำอธิบาย
- ฟังก์ชัน
avg(float a[])รับ Pointer ไปยัง Element แรก - ใน C จริงๆ แล้ว
float a[]เทียบเท่าfloat *a - การแก้ไขข้อมูลในฟังก์ชันจะส่งผลต่ออาเรย์ต้นฉบับ
Pass by Value จริง (C++)
ใน C++ ใช้ std::array หรือ std::vector เพื่อ Pass by Value จริง:
#include <array>
#include <iostream>
void func(std::array<int, 3> arr) { // Copy ทั้งอาเรย์
arr[0] = 99;
}
int main() {
std::array<int, 3> a = {1, 2, 3};
func(a);
std::cout << a[0]; // ยังคงเป็น 1
}