我是否以错误的方式处理指针?我想通过将变量的地址传递给函数来更新变量的值。
void func(int *p){
int x = 3;
p = &x;
}
int main(){
int y = 0;
func(&y);
printf("\n Value = %d",y);
}
我得到以下输出:
值= 0 已退出:ExitFailure 11
答案 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
,意味着将指针的本地副本更改为指向本地变量。