指针地址传递有关问题,求解答
指针地址传递问题,求解答
# include<stdio.h>
int main(void)
{
int i = 6;
int j = 8;
printf("地址:%p\n",&i);
printf("地址:%p\n",&j);
f(&i,&j);
printf("i = %d\tj = %d\t",i,j);
return 0;
}
int f(int * p,int * q)
{
int * t;
*t = *p;
*p = *q;
*q = *t;
return 0;
}
在被调函数里面建立临时指,返回时还是p和q的地址,互换还是地址里面的值。为什么在编译没出错,在执行后会程序错误无法执行。
------解决思路----------------------
int * t; 此时t为一个野指针,没有为其开辟空间,其指向的地址是不确定的,对其访问很危险。
将
int * t;
*t = *p;
*p = *q;
*q = *t;
改成
int t;
t = *p;
*p = *q;
*q = t;
就好了
# include<stdio.h>
int main(void)
{
int i = 6;
int j = 8;
printf("地址:%p\n",&i);
printf("地址:%p\n",&j);
f(&i,&j);
printf("i = %d\tj = %d\t",i,j);
return 0;
}
int f(int * p,int * q)
{
int * t;
*t = *p;
*p = *q;
*q = *t;
return 0;
}
在被调函数里面建立临时指,返回时还是p和q的地址,互换还是地址里面的值。为什么在编译没出错,在执行后会程序错误无法执行。
------解决思路----------------------
int * t; 此时t为一个野指针,没有为其开辟空间,其指向的地址是不确定的,对其访问很危险。
将
int * t;
*t = *p;
*p = *q;
*q = *t;
改成
int t;
t = *p;
*p = *q;
*q = t;
就好了