我在5 - 6年内没有使用过C,觉得这可能是一个非常明显的答案。
我认为阵列通过用C自动引用传递,所以下面我的代码应该修改()的变化函数中在主创建数组的值。它会在更改函数中更改局部变量的值,但之后不会在主函数中反映出来。
以下是我的示例代码:
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,
PRECHANGE(CHANGE): 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,
PRECHANGE(CHANGE): 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,
答案 0 :(得分:3)
如果将值设置为1
printf("AFTER (MAIN):\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
array[i][j] = 1; /* set to 1 and print afterwards */
printf("%i, ", array[i][j]);
}
}
为什么你希望打印0?