指针值作为参数

时间:2015-01-29 23:29:47

标签: c

应用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,这让我感到困惑。

2 个答案:

答案 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的地址。