处理指针的以下代码有什么问题?

时间:2015-04-15 08:42:05

标签: c pointers

我是否以错误的方式处理指针?我想通过将变量的地址传递给函数来更新变量的值。

void func(int *p){
        int x = 3;
        p = &x;
}

int main(){
        int y = 0;
        func(&y);
        printf("\n Value = %d",y);
}

我得到以下输出:

  

值= 0   已退出:ExitFailure 11

4 个答案:

答案 0 :(得分:10)

您必须取消引用指针以替换指针指向的值。

请参阅:

#include <stdio.h>

void func(int *p){
        int x = 3;
        *p = x;
}

int main(){
    int y = 0;
    func(&y);
    printf("\n Value = %d",y);
    return 0;
}

要删除退出失败,请添加返回0;声明进入主要功能。

参见运行示例: http://ideone.com/rO8Gua

答案 1 :(得分:7)

void func(int *p){
    *p = 3;
}

您将p设置为本地变量x的地址。首先,设置p的值不会更改y的值(该函数只会收到y地址的副本,即使您更改了该地址,不会改变y)。

其次,x是一个局部变量,所以在函数func终止后你不能使用它的内容。

第三,您不能以这种方式更改y的地址,因为它是一个局部变量。你需要将它声明为指针。

答案 2 :(得分:6)

您可以使用* p来引用p引用的内存内容。因此,p =&x;将改变p而不是p引用的内存内容。您应该使用*p = x

答案 3 :(得分:4)

您的意思是要将p的值设置为x?这是

*p = x;

您实际获得的内容p = &x,意味着将指针的本地副本更改为指向本地变量。