Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多维数组传递/修改为C中的函数_C_Multidimensional Array_Pass By Reference - Fatal编程技术网

将多维数组传递/修改为C中的函数

将多维数组传递/修改为C中的函数,c,multidimensional-array,pass-by-reference,C,Multidimensional Array,Pass By Reference,我已经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-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");
}
intmain(){
整数数组[3][5];
int i;
int j\
printf(“前(主):\n”);
对于(i=0;i<3;i++){
对于(j=0;j<5;j++){
数组[i][j]=1;
printf(“%i”,数组[i][j]);
}
}
printf(“\n\n”);
改变(数组);
printf(“\n”);
printf(“后(主):\n”);
对于(i=0;i<3;i++){
对于(j=0;j<5;j++){
数组[i][j]=1;
printf(“%i”,数组[i][j]);
}
}
printf(“\n”);
返回1;
}
无效更改(整数数组[][5]){
printf(“变更前(变更):\n”);
int i;
int j;
对于(i=0;i<3;i++){
对于(j=0;j<5;j++){
printf(“%i”,数组[i][j]);
}
}
printf(“\n\n”);
printf(“变更后(变更):\n”);
对于(i=0;i<3;i++){
对于(j=0;j<5;j++){
数组[i][j]=0;
printf(“%i”,数组[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,1,1,1,1

变更后(变更): 0,0,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,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,0,0,0


如果将该值设置为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]);
 }
}
printf(“之后(主):\n”);
对于(i=0;i<3;i++){
对于(j=0;j<5;j++){
数组[i][j]=1;/*设置为1,然后打印*/
printf(“%i”,数组[i][j]);
}
}

为什么希望打印0?

如果将值设置为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]);
 }
}
printf(“之后(主):\n”);
对于(i=0;i<3;i++){
对于(j=0;j<5;j++){
数组[i][j]=1;/*设置为1,然后打印*/
printf(“%i”,数组[i][j]);
}
}

为什么希望打印0?

这一点很好!FFS!现在在我的真实程序上试用,看看为什么不起作用。说得好!FFS!现在在我的真实程序上试用,看看为什么不起作用。