Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 下面处理指针的代码有什么问题?_C_Pointers - Fatal编程技术网

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

C 下面处理指针的代码有什么问题?,c,pointers,C,Pointers,我用错误的方法处理指针了吗?我想通过将变量的地址传递给函数来更新变量的值 void func(int *p){ int x = 3; p = &x; } int main(){ int y = 0; func(&y); printf("\n Value = %d",y); } 我得到以下输出: 值=0 退出:退出失败11 您的意思是要将p处的值设置为x?那是 *p = x; 您实际得到的,p=&

我用错误的方法处理指针了吗?我想通过将变量的地址传递给函数来更新变量的值

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

int main(){
        int y = 0;
        func(&y);
        printf("\n Value = %d",y);
}
我得到以下输出:

值=0 退出:退出失败11


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

*p = x;
您实际得到的,
p=&x
,意味着将指针的本地副本改为指向本地变量

void func(int *p){
    *p = 3;
}
您正在将
p
设置为局部变量
x
的地址。首先,设置
p
的值不会更改
y
的值(函数只接收
y
地址的副本,即使您更改了地址,也不会更改
y

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


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

必须取消对指针的引用以替换指针所指向的值

见:

#包括
无效函数(int*p){
int x=3;
*p=x;
}
int main(){
int y=0;
func&y;
printf(“\n值=%d”,y);
返回0;
}
要删除退出失败,请添加返回0;语句转换为主函数

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

int main(){
        int y = 0;
        func(&y);
        printf("\n Value = %d",y);
}
请参阅运行示例:

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