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