C语言指针的用法——Swap交换函数

mac2026-05-20  5

Swap交换函数

父函数调用子函数,子函数如果想要修改父函数的值,必须传指针(地址),子函数内必须要解引用

子函数的改变要想影响到父函数,必须传指针,解引用

1.传指针:相当于走到房间门口,知道房间的确切位置。 2.解引用:相当于打开房门,这可以对房间内部进行改造。

1 、未传指针

只在子函数中交换了a b的值,但对父函数无影响

void Swap_err1(int a,int b)//必须要传指针 { int tmp = a; a = b; b = tmp; //printf("%d,%d\n",a,b);//假象 }

2、传指针但没有解引用

交换了p1、p2中保存的地址,但是只影响了地址,对值没影响。 因为主函数中打印 a b 的值时,a b中的值依旧为10 20;只不过是p1 p2中保存的地址发生改变

void Swap_err2(int *p1,int *p2)//传了指针,但是无意义。没有解引用,未跳入父函数中 { int *tmp = p1; p1 = p2; p2 = tmp; }

3、野指针,悬挂指针:你没有访问权限的地址(指针)

有可能是不存在的地址,或者存在但是你不能访问。

void Swap_err3(int *p1,int *p2) { int *tmp;//野指针,悬挂指针 局部变量,未初始化,随机值 *tmp = *p1; *p1 = *p2; *p2 = *tmp; }

4、 既传指针且解引用

tmp保存p1的值 ,即tmp=10; p1保存p2的值, 即p1=20; p2保存tmp的值, 即p2=10; 此时在主函数中,p1与p2地址中保存的数已交换。

void Swap(int *p1,int *p2) { int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; }

int main() { int a = 10; int b = 20; Swap(&a,&b); printf("%d,%d\n",a,b); return 0; }
最新回复(0)