【发布时间】:2010-10-25 22:57:59
【问题描述】:
我已经 5-6 年没用过 C 了,感觉这可能是一个非常明显的答案。
我认为数组在 C 中是通过引用自动传递的,所以我下面的代码应该在 change 函数中修改 main() 中创建的数组的值。它会在 change 函数中更改局部变量的值,但这不会在之后的 main 函数中反映出来。
这是我的示例代码:
int main(){
int array[3][5];
int i;
int j;\
printf("BEFORE (MAIN):\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
array[i][j] = 1;
printf("%i, ", array[i][j]);
}
}
printf("\n\n");
change(array);
printf("\n");
printf("AFTER (MAIN):\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
array[i][j] = 1;
printf("%i, ", array[i][j]);
}
}
printf("\n");
return 1;
}
void change(int array[][5]){
printf("PRECHANGE (CHANGE):\n");
int i;
int j;
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
printf("%i, ", array[i][j]);
}
}
printf("\n\n");
printf("AFTER CHANGE (CHANGE):\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
array[i][j] = 0;
printf("%i, ", array[i][j]);
}
}
printf("\n");
}
输出如下:
之前(主要): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
预更改(更改): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
改变后(改变): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
之后(主要): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
我原以为应该是这样的:
之前(主要): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
预更改(更改): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
改变后(改变): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
之后(主要): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
【问题讨论】:
标签: c multidimensional-array pass-by-reference