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

try*_*arn 5 c pointers

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

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

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

我得到以下输出:

值= 0已退出:ExitFailure 11

Zel*_*don 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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


fed*_*024 7

void func(int *p){
    *p = 3;
}
Run Code Online (Sandbox Code Playgroud)

您正在设置p本地变量的地址x.首先,设置值p不会改变值y(该函数只接收地址的副本y,即使你改变了它,你也不会改变y).

其次,x是局部变量,因此在函数func终止后不能使用它的内容.

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


小智 6

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