关于指针的几个错误用法

错误的做法

//子函数中的a,b与主函数中的a,b地址不同,所以子函数中的a,b与主函数中的不同,所以不能调换主函数中的a,b

void Swap_err1(int a,int b)

{
int tmp = a;
a = b;
b = tmp;//调换的是子函数中形参的值
}


//修改指针的指向不会影响父函数,调换的是指针p1,p2的值,指向变为p1指向b,p2指向a,并没有调换a和b的值
void Swap_err2(int *p1,int *p2)
{
int *tmp = p1;
p1 = p2;
p2 = tmp;//将指针中保存的a,b的地址调换,指向改变,值不变
}

//并没有给tmp赋地址,指针tmp解引用之后找不到地址
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}

    正确的做法
//子函数的改变要能影响到父函数,必须传指针和解引用
void Swap(int *p1,int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;//p1,p2解引用之后将a,b的值相互调换

}

int main()
{
int a = 10;
int b = 20;


Swap(&a,&b);


printf("%d,%d\n",a,b);


return 0;
}

猜你喜欢

转载自blog.csdn.net/wry_sunny_/article/details/79559637