gpt4 book ai didi

c - 整数指针作为函数的参数

转载 作者:行者123 更新时间:2023-11-30 19:17:51 24 4
gpt4 key购买 nike

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;
}

至于你关于结构的第二个问题。结构指针仍然包含内存中结构的地址,但是您引用的“箭头符号”将隐式地为您取消对字段的引用。

关于c - 整数指针作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com