我将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;
}
}
答案 0 :(得分:-1)
那里有一个很大的混乱,你需要习惯指针!
好的,所以你的函数得到g
和p
int *
。您提供给他们的是&g
和&p
,其中g
和p
也是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
。