2014-10-18 17 views
7

G'day!Truyền một mảng làm đối số hàm từ bên trong một hàm lấy nó làm đối số trong C

Nếu tôi có hàm nhận một mảng int làm đối số, sau đó từ bên trong hàm đó, gửi cùng một mảng đó sang hàm khác, nó vẫn có thể chỉnh sửa giá trị mảng và có cam kết ở cấp độ chính thay vì ở cấp độ chức năng?

tức là

int 
main(int argc, char *argv[]) { 
    int A[50]; 
    functionB(A); 
} 

nơi chức năng B trông giống như:

void functionB(int A[]) { 
    functionC(A); 
} 

và chức năng C là một trong đó thực sự đột biến các giá trị trong vòng A [].

Chính có thấy mảng đã thay đổi hoặc bản gốc A [] không?

Cảm ơn!

+2

Vâng, các mảng ban đầu sẽ được sửa đổi. –

+1

Điều gì đã xảy ra khi bạn thử? –

Trả lời

10

Mảng phân rã thành con trỏ. Vì vậy, nó sẽ sửa đổi mảng ban đầu.

Kiểm tra nó

void functionC(int A[]) { 
    A[0] = 1; 
    A[1] = 2; 
} 

void functionB(int A[]) { 
    functionC(A); 
} 

int 
main(int argc, char *argv[]) { 
    int A[2]={5,5}; 

    printf("Before call: %d %d\n",A[0],A[1]); 
    functionB(A); 
    printf("After call : %d %d\n",A[0],A[1]); 
} 
Các vấn đề liên quan