应用 void 函数 f
后,printf
中的值没有改变,这让我感到困惑。这是旋转指针的基本内容。确切的问题是:为什么最终值不是 2 而不是 1?
int a=1, b=2;
void f(int* p) {
p=&b;
}
int main() {
int *p=&a;
f(p);
printf("%d\n", *p);
}
main 中的 *p
值仍然是 1,这就是让我困惑的地方。
最佳答案
您需要取消引用p
并从b
中删除&
地址运算符
这会将 b
的值分配给 p
指向的地址:
void f(int* p)
{
*p = b;
}
为什么它打印 1
而不是例如b
的地址是您分配的:p = &b
,它只是将 b
的地址分配给本地指针变量 p
。这意味着它在这里不再指向a
。但由于这只是一个本地副本,因此它不会更改您在 main()
中传递的 p
的值。
这使得它更加明显:
void f(int* ptr)
{
// assign a value
*ptr = 1337;
}
int main()
{
int local_integer = 666;
// prints "666"
printf("%d\n", local_integer);
f(&local_integer);
// prints "1337"
printf("%d\n", local_integer);
}
关于c - 指针值作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226661/