我正在学习C,我遇到了这个错误。为什么我不能将指针传递给函数 as change(&p_x);and onlychange(&x);有效?谢谢
#include <stdio.h>
void change(int *p_xa) // GET ERROR HERE signal: segmentation fault (core dumped)
{
*p_xa = 999;
}
int main()
{
int x = 1;
int * p_x = &x;
*p_x = 2;
change(&p_x); // cannot do this
printf("x is: %d \n", *p_x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
change有一个类型为 的参数int *。
通话通过&p_x。的类型p_x是int *. 的类型&p_x是int **. 这是参数的错误类型。传递&p_x的是地址p_x,但是你想传递的是地址x。
通过p_x,不通过&p_x。的值p_x是 的地址x。
在编译器中启用警告并将其升级为错误。使用 Clang,从 开始-Wmost -Werror。对于 GCC,从-Wall -Werror. 使用 MSVC,从/W3 /WX. 当您执行此操作时,当参数对于声明的参数来说是不正确的类型时,编译器会警告您。