C语言 指针在函数传参中的使用

[复制链接]
191|3
 楼主 | 2019-6-30 20:54 | 显示全部楼层 |阅读模式
int add(int a, int b)   //函数传参的时候使用了int整型数据,本身是数值类型。实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算。实参自己实际是不参与运算的。所以在该函数中,实参本身是没有得到改变的。
int main()
{
  int x = 3, y = 5;
       swap(x, y);
  printf("x = %d ,y = %d\n",x, y);  //交换失败
       swap_pointer(&x, &y);
  printf("x = %d ,y = %d\n",x, y);  //交换成功
}
int swap(int a, int b)     //C语言中,函数调用时,实参传递给形参实际是传值调用。也就是说,实参x和y将自己的值拷贝一份传给形参 a 和 b;因此在函数swap中实际得到交换的是 a 和 b,而不是实参 x 和 y,因此函数执行完后,x和y的值依然没有改变。
{
  int temp;
  temp = a;     //a是swap里边的形参,实际调用时得到的是实参x的一份拷贝,只是和x的值相等而已,其他并无任何关联,因此在这里不能访问到实参x
       a = b;
  b = temp;
  return 0;
}
int swap_pointer(int *p1, int *p2)   //C语言函数调用时,一直都是传值调用。也就是说实际传递的一直都是实参的拷贝,但是在本函数中的形参和实参都不是x和y,而是x和y的地址值。这样的话,就让我们在调用函数里通过间接访问*p的方式,访问到了函数外部的实参。                                                      //(如果不使用指针,再调用函数内部只能访问到形参,无法访问到函数外部的实参)
{
  int temp;
  temp = *p1;     //实际调用时,p1得到的实参是x的地址&x,所以*p1代表的就是x
       *p2 = *p1;
       *p1 = temp;
       return 0;
}

使用特权

评论回复
| 2019-7-7 22:06 | 显示全部楼层
讲得挺好, 只是指针变量尽量少用来修改内容, 会影响程序结构性

使用特权

评论回复
 楼主 | 2019-7-10 18:58 | 显示全部楼层
airwill 发表于 2019-7-7 22:06
讲得挺好, 只是指针变量尽量少用来修改内容, 会影响程序结构性

谢谢,这里总结的只是指针的用法,当然你的结论应该通过实战才能得出来,谢谢提醒,又学习了

使用特权

评论回复
| 2019-7-10 22:02 | 显示全部楼层
跟随学习   指针很深入   

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /7 下一条

在线客服 快速回复 返回顶部 返回列表