【问题标题】:Passing/modifying multidimensional array to function in C传递/修改多维数组以在 C 中运行
【发布时间】: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


    【解决方案1】:

    如果将值设置为 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?

    【讨论】:

    • 好点! FFS!现在在我的真实程序上尝试一下,看看为什么它不起作用。
    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2016-03-19
    • 2016-01-22
    • 1970-01-01
    • 2022-11-05
    相关资源
    最近更新 更多