第一弹
萌猫导航

8.3C语言指针变量作为函数参数

作者: 不爱洗头发 来源: 怪哈哈网 日期: 2015-09-28 17:26:05 人气: -

函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

【示例】输入两个整数,按大小顺序输出。

  1. #include <stdio.h>

  2. // 交换两个数
  3. void swap(int *p1, int *p2){
  4. int temp;  //临时变量
  5. temp = *p1;
  6. *p1 = *p2;
  7. *p2 = temp;
  8. }

  9. int main(){
  10. int a, b;
  11. int *pointer_1, *pointer_2;
  12. scanf("%d, %d",&a, &b);
  13. pointer_1 = &a;
  14. pointer_2 = &b;
  15. if(a<b){
  16. swap(pointer_1, pointer_2);
  17. }
  18. printf("\n%d, %d\n",a, b);

  19. return 0;
  20. }

运行结果:
10, 20
20, 10

对程序的说明:
1) swap是自定义函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的 值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。

2) 接着执行if语句,由于a<b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值 传递给形参变量。采取的依然是“值传递”方式。因此虚实结合后形参p1的值为&a,p2的值为&b。这时p1和pointer_1指向变 量a,p2和pointer_2指向变量b。

3) 接着执行执行swap函数的函数体使*p1和*p2的值互换,也就是使a和b的值互换。函数调用结束后,p1和p2不复存在(已释放)。

4) 最后在main函数中输出的a和b的值是已经过交换的值。请注意交换*p1和*p2的值是如何实现的。请找出下列程序段的错误:

  1. void swap(int *p1,int *p2){
  2. int *temp;
  3. *temp=*p1;  //此语句有问题
  4. *p1=*p2;
  5. *p2=temp;
  6. }


请考虑下面的函数能否实现实现a和b互换。

  1. void swap(int x,int y){
  2. int temp;
  3. temp=x;
  4. x=y;
  5. y=temp;
  6. }

如果在main函数中用“swap(a, b);”调用swap函数,会有什么结果呢?

【示例】对上面的代码进行修改。

  1. #include <stdio.h>

  2. // 交换两个数
  3. void swap(int *p1,int *p2){
  4. int *p;
  5. p = p1;
  6. p1 = p2;
  7. p2 = p;
  8. }

  9. int main(){
  10. int a, b;
  11. int *pointer_1, *pointer_2;
  12. scanf("%d, %d",&a, &b);
  13. pointer_1 = &a;
  14. pointer_2 = &b;
  15. if(a<b){
  16. swap(pointer_1, pointer_2);
  17. }
  18. printf("\n%d, %d\n",a, b);

  19. return 0;
  20. }

运行结果:
10, 20
20, 10


转载请注明文章来源(欢迎分享): http://www.guaihaha.com/c/5617.html

相关内容

怪哈哈动漫图库
关于怪哈哈
怪哈哈是一个集搞笑,美女,动漫,游戏,技术等为核心的综合性网站!
联系我们
商务洽谈、广告合作、友情链接、侵权举报,这些都可以联系我们哦!
关于我们 - 联系我们 - 广告服务 - 免责申明   
本站文字和图片均为严格审查筛选收藏,均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的照片,请来信告知,我们将及时撤销相应文字和图片.
Copyright @2014-2020 怪哈哈网 All Rights Reserved.
【谢谢大家一直支持贵站】