void inc(int *p) {
p += 1;
}
int main() {
int x = 5;
inc(&x);
printf("x = %d\n", x);
return 0;
}
我发现该代码不会增加x的值。
当我改变时它起作用
void inc(int *p) {
p += 1;
}
到
void inc(int *p) {
*p += 1;
}
现在有点与指针混淆了。
有人能帮我吗?
先感谢您!
这两段代码之间的区别是增加指针所包含的地址与更改实际值之间的区别。
第一部分代码:p += 1;
将p
指向的地址增加一个。例如,如果x
在地址124处,则p
首先等于124,现在增加至125(在一个简单的场景中,实际上这将增加更多,就像p
整数指针一样,因此增加将超过1个字节)。
第二段代码:*p +=1;
首先取消引用地址,p
然后在当前存储在该地址中的值上加一个。例如,如果x
在地址124处且值为42,则p
等于124,但是*p
被引用的指针且等于42
。然后,您可以分配一个新值以*p
使地址124处的值(即的值x
)等于43
。
编辑:如@Bathsheba所述,指针是按值传递给函数调用的。这意味着,如果我们要执行以下操作,则原始指针y
将保持不变,而p
指向的地址确实如上所述发生变化。
void inc(int *p) {
p += 1;
}
int main() {
int x = 5;
int *y = &x;
inc(y);
return 0;
}
至于关于结构的第二个问题。结构指针仍然包含内存中结构的地址,但是您引用的“箭头符号”将为您隐式地对字段进行解引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句