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

office365打不开 📅 2025-10-08 10:45:56 👤 admin 👁️ 2057 ❤️ 455
C语言指针的用法——Swap交换函数

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;

}

相关推荐

招行王者荣耀怎么绑定 招行王者荣耀联名信用卡绑定指南
关于独的成语
www365bet娱乐场

关于独的成语

📅 08-07 👁️ 1239
产品参数
office365打不开

产品参数

📅 07-31 👁️ 1271