C 指针作为函数参数指向指针
我有以下代码:C 指针作为函数参数指向指针,c,pointers,C,Pointers,我有以下代码: #包括 #包括 整数f(整数x,整数*py,整数**ppz){ int y,z; **ppz+=1; z=**ppz; *py+=2; y=*py; x+=3; 返回x+y+z; } 内部主(空){ int c=4; printf(“f():%d\n”,f(c,&c,&c)); printf(“c:%d\n”,c); 返回退出成功; } 我如何才能正确访问**ppz,因为我会收到一条错误消息:“使用了标签'c',但未定义”。一个int**是指向int*的指针。您需要创建一个in
#包括
#包括
整数f(整数x,整数*py,整数**ppz){
int y,z;
**ppz+=1;
z=**ppz;
*py+=2;
y=*py;
x+=3;
返回x+y+z;
}
内部主(空){
int c=4;
printf(“f():%d\n”,f(c,&c,&c));
printf(“c:%d\n”,c);
返回退出成功;
}
我如何才能正确访问
**ppz
,因为我会收到一条错误消息:“使用了标签'c',但未定义”。一个int**
是指向int*
的指针。您需要创建一个int*
类型的变量,以便能够将指针传递到它的某个位置。以下是您应该做的:
int main(void) {
int c = 4;
int* pc = &c;
printf("f(): %d\n", f(c, pc, &pc));
printf("c: %d\n", c);
return EXIT_SUCCESS;
}
请参阅@ikegami的答案,了解指针指针正确使用的说明。您希望修改
int
类型的变量,因此参数应为int*
,而不是int**
如果要修改int*
variable类型的变量,可以使用int**
。这里不是这样
比如说,
void f(int **pp) {
*pp = malloc(10);
}
int main(void) {
int *p;
f(&p);
// ...
free(p);
}
您想修改
int
,因此参数应该是int*
,而不是int**
&c
是指针表达式。无法创建指向表达式的指针,因为它没有地址。。此外,&&
运算符具有不同的含义。仅供参考,关于“使用了标签“c”的错误消息是因为&&name
是引用语句标签的GCC扩展(通常是goto
语句的目标)。对于需要int**
的函数,该代码可能永远都不正确。它在这种特殊情况下有效,但只是因为在那里使用int**
没有意义。你是什么意思?哦,我明白你的意思了。是的,你是对的,重点不是修改原始int,而是修改int*的值。但是,我认为OP的问题更多的是一个教学示例,旨在展示指针的功能/操作,而不是在适当的意义上正确使用双指针。“你是什么意思?”,如果f
更改*ppz
(这是int**ppz
)的唯一原因,为什么你认为你的代码可以接受“我认为OP的问题更像是一个教学示例”,我认为你是对的,你没有教清楚如何正确使用int**
。