将数组传递给函数时值的变化

时间:2016-10-31 02:30:28

标签: c arrays pointers

我将64个int的数组传递给c中的函数。当我在函数内打印p [1]时,与在主函数外部打印p [1]时相比,它不会显示相同的值。我得到的输出是“这是p [1]:0”和“这是函数内的p [1]:1”

下面是主要代码:

for (int i=0; i < 64; i++){
 if (((i+1)%4) == 0){
  int new = ((i+1)/4)-1;
  printf("this is p[1]: %d\n", p[1]);
  gg[new] = getgg(&g, &p, i-3);
  gp[new] = getgp(&p, i-3);
}
}

这是我的功能:

int getgg(int (*g)[64], int (*p)[64], int i){
   printf("this is p[1] inside the function: %d\n", *p[1]);
   if((*g[i+3]) || (*p[i+3] && *g[i+2]) || (*p[i+3] && *g[i+2] && *g[i+1]) ||   (*p[i+3] && *p[i+2] && *p[i+1] && *g[i]) ){
return 1;
}
else{
return 0;
 }
}

1 个答案:

答案 0 :(得分:-1)

那里有一个很大的混乱,你需要习惯指针!

好的,所以你的函数得到gp int *。您提供给他们的是&g&p,其中gp也是int *。所以你传递给你的函数类型int **

g[i+3] *(g+i+3)也是*g[i+3],所以让我们看看g是什么。

g[i+3]是数组第一个元素的地址。 i+3地址旁边有*g[i+3]个地方,等等等等......所以g就是其内容!

这可能是你不知道的事情!

尝试传递p&g而不是&p*,并从您的函数中移除所有x