Trong chương trình C bên dưới, tôi không hiểu tại sao buf [0] = 'A' sau khi tôi gọi foo. Không phải là foo làm pass-by-giá trị?Lập trình C - Truyền qua tham chiếu
#include <stdio.h>
#include <stdlib.h>
void foo(char buf[])
{
buf[0] = 'A';
}
int main(int argc, char *argv[])
{
char buf[10];
buf[0] = 'B';
printf("before foo | buf[0] = %c\n", buf[0]);
foo(buf);
printf("after foo | buf[0] = %c\n", buf[0]);
system("PAUSE");
return 0;
}
đầu ra:
before foo | buf[0] = 'B'
after foo | buf[0] = 'A'
Nhờ tất cả mọi người, đặc biệt là James, cho câu trả lời. Tại sao mọi người sử dụng gọi theo giá trị nếu nó không thay đổi giá trị của đầu vào? –
Bởi vì bạn có thể cần một giá trị của một cái gì đó nhưng không cần phải thay đổi nó. – Javier
@Kevin: Vì chức năng có thể chỉ cần giá trị. Chức năng mà không có tác dụng phụ dễ dàng hơn để lý luận (không phải là bạn sẽ nhận được rất xa bằng cách sử dụng C như là một ngôn ngữ lập trình chức năng), và đi qua bởi giá trị loại bỏ tác dụng phụ có thể. –