C语言中利用Swap函数交换变量a,b

it2025-01-15  3

C语言中利用Swap函数交换变量a,b

常见错误写法 error1

void Sawp_error1(int a,int b) { int tmp; tmp=a; a=b; b=tmp; } int main() { int a=10; int b=20; Sawp_error1(a,b); printf("%d %d\n",a,b); return 0; }

PS 局部变量:定义在函数内部的变量只能在函数内部使用。 上面代码里在main函数中定义的a,b与Swap函数中a,b只是同名,只在Swap函数中交换a与b的值而不影响main函数中的a与b的值。

error2

void Sawp_error2(int *p1,int *p2) { int *tmp; tmp=p1;//将a的地址赋值给tmp p1=p2; p2=tmp; } int main() { int a=10; int b=20; Sawp_error2(&a,&b); printf("%d %d\n",a,b); return 0; }

PS 在上面代码中Swap函数虽然使用指针,但仅仅修改的只是指针,交换a和b的地址,对于main函数中a和b的值并未交换。

error3

void Sawp_error3(int *p1,int *p2) { int *tmp=*p1;//野指针 *p1=*p2; *p2=*tmp; } int main() { int a=10; int b=20; Sawp_error3(&a,&b); printf("%d %d\n",a,b); return 0; }

PS Swap函数中出现野指针,不能访问的指针,出现程序崩溃。 野指针(悬挂指针):没有访问权限的指针,这个指针有可能存在也有可能不存在,但是你不能访问。(野指针不好判断) 1、地址不存在(例如电话号码少一位)。 2、地址存在,但是不能访问(例如电话号码写成别人)。 3、地址之前可以访问,但现在不可以(更换电话号码)。

正确写法

void Sawp(int *p1,int *p2) { int tmp; tmp=*p1;//tmp=a *p1=*p2;//a=b *p2=tmp;//b=tmp } int main() { int a=10; int b=20; Sawp(&a,&b); printf("%d %d\n",a,b); return 0; }

结论 一个函数(父函数)调用另一个函数(子函数),想通过子函数修改父函数的数据,必须传指针,子函数内部解引用。也就是子函数的改变要想影响父函数的数据必须传指针和解引用。 error1中既没有指针也没有解引用,error2中只是传指针但在Swap函数中没有使用解引用 error3中传了野指针导致程序崩溃。

最新回复(0)