关于指针上一篇指针(一)中提到的解引用,在这一篇中继续进行进一步的诠释,描述解引用更多的应用方式。
子函数:被调用函数 ;父函数:调用函数。关于父函数调用子函数的调用,子函数的改变要想改变父函数的值,必须要
传指针
解引用
有关父函数调用子函数代码有几处容易出错的地方,代码如下:
void Swap_err1(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
//printf("%d,%d\n",a,b);
}
void Swap_err2(int *p1,int *p2)//有传指针,但是没有解引用
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}
void Swap(int *p1,int *p2)
{
int tmp= *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()//调用函数,父函数
{
int a =10;
int b = 20;
Swap_err1(a,b);
Swap_err2(&a,&b);
Swap_err3(&a,&b);
Swap(&a,&b);//被调用函数,子函数
printf("%d,%d\n",a,b);
return 0;
}
Swap_err1函数中没有传指针,没有解引用,子函数和父函数中a,b的地址不同。
Swap_err2函数中有传指针,但没有解引用,子函数和父函数的地址还是不同的。
Swap_err3函数中引入了野指针(即悬挂指针),使程序无法正常进行。
Swap函数有传指针,有解引用,子函数和父函数的地址相同,完成了调用。