指针作为函数参数出现错误
#include<stdio.h>int a=10;
int b=5;
void change(int *p){
p=&b;
}
int main(){
int *p=&a;
change(p);
printf("%d",*p);
}
为啥这段代码输出结果是10而不是5?我写这种指针作为参数的函数经常会出现SIGSEGV(Segment fault)这样的错误是为啥?大家帮忙解决一下{:10_266:}
#include<stdio.h>
int a=10;
int b=5;
int main(){
int *p=&a;
p=&b;
printf("%d",*p);
}
上面这段代码输出就是5了{:10_277:} 明明只是把p=&b写成一个函数而已啊,是哪里出问题了吗? 你交换的是两个数字,你的函数却只有一个形参,你觉得合适么? 正确的写法是
void _swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
} 本帖最后由 jackz007 于 2019-10-10 11:16 编辑
change(p) ;
你是希望把 p 作为指针参数传入函数 change(),然后,在函数中直接修改 p,再把变化传递回调用函数,这种想法是好的,但是,却行不通。因为参数 p 虽然是指针,但是,在函数 change() 内部仍然属于临时变量,是在堆栈中分配存储空间的,会在函数退出时的退栈操作后自然消失。所以,对 p 的修改根本无法传递到调用函数。
那么,怎么办呢?如果希望通过函数修改某个参数,那就应该传入这个参数的地址,而不是这个参数本身,这就是答案!
明白了这个道理,你的代码就好改了:
#include <stdio.h>
int a = 10 ;
int b = 5;
void change(int ** p)
{
* p= & b ;
}
int main()
{
int * p = & a ;
change(& p) ;
printf("%d\n",* p) ;
}
页:
[1]