Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การส่งอาเรย์แบบ Pass by Value ใน C

ใน 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
}