传递/修改多维数组以在C中起作用

时间:2010-10-25 22:57:59

标签: c multidimensional-array pass-by-reference

我在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,

1 个答案:

答案 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?