应用void函数printf
后,f
中的值没有变化,这让我感到困惑。它是旋转指针的基本内容。确切的问题是:为什么不是结束值2而不是1?
int a=1, b=2;
void f(int* p) {
p=&b;
}
int main() {
int *p=&a;
f(p);
printf("%d\n", *p);
}
主要内容中的*p
值仍为1,这让我感到困惑。
答案 0 :(得分:4)
您需要取消引用p
并从&
b
地址运算符
这会将b
的值分配给p
指向的地址:
void f(int* p)
{
*p = b;
}
它为什么打印1
而不是... b
的地址是您指定的:p = &b
,它只将b
的地址分配给本地指针变量p
。这意味着 不再指向a
了。但由于这只是一个本地副本,因此它无法更改p
中传递的main()
的值。
这使得它更加明显:
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);
}
答案 1 :(得分:0)
在代码中,您可以在堆栈上定义指向int的指针。它的值与main()
函数中的指针相同,该指针恰好指向变量a
的地址。然后你改变它的值(所以堆栈上的指针现在指向b
),然后你只需删除指针。
void f(int* p) {
p=&b;
}
这就是为什么如果你取消引用main
中的指针,它仍然指向int变量a
的地址。