详细解读C语言参数传递

您所在的位置:网站首页 传递函数的作用 详细解读C语言参数传递

详细解读C语言参数传递

2024-07-11 16:10| 来源: 网络整理| 查看: 265

指针变量作为函数参数 -值传递和地址传递区分

参考谭浩强版本C语言,本书对于函数的参数传递方式一共就介绍了两种:值传递和地址传递 P224页: 从此页开始介绍指针变量作为函数的参数的情况,在这之前,本书的参数传递方式是值传递,也就是参数不涉及到所谓的指针类型,一般函数参数都是变量:

void add(int a,int b);//参数a b都是int类型的变量,不是指针类型,判断为值传递; 何为值传递? 先给大家分析一下值传递:

请大家看一下代码:

1. void swap1(int x,int y) 2. { 3. int temp; 4. temp = x; 5. x = y; 6. y = temp; 7. printf("x = %d,y = %d\n",x,y); 8. } 9. int main() 10. { 11. int a = 12,b = 24; 12. swap1(a,b); // 值传递 13. printf("a = %d b = %d",a,b); 14. }

结果如图所示: 在这里插入图片描述

分析:

首选我们都知道main实际上也是一个函数,它的作用范围是 第10行-第14行 swap1也是一个函数,它的作用范围是1-8行 main函数中的变量与swap函数区域中的变量互不冲突的: 程序未执行前: 在这里插入图片描述 当程序执行到第12行时候: main函数中的变量a把12这个int型数据赋值给swa1中的变量x(变量b对y也是同理),之后后续的在swap1函数中的操作,全是针对swap1函数中的变量x和变量y进行的,与Main函数中的变量a和p没有关系了! ,a和b仅仅起到了赋值的作用!! ! !

在这里插入图片描述 所以swap1中的x和y的交换,实际上是swap1函数中的x和y交换,与main函数中的变量a和b没有关系,而且我们是在main函数中的是 printf(“a = %d b = %d”,a,b); ,当然要输出的是main函数中的变量a和b,

何为地址传递?

在前面一和二章节的基础之上,我们分析下面的例子:

1.void swap2(int* x,int* y) 2.{ 3. int temp; 4. temp = *x; 5. *x = *y; 6. *y = temp; 7. printf("x = %d y = %d\n",*x,*y); 8.} 9.int main(int argc, char *argv[]) 10.{ 11. int a = 12,b = 24; 12. swap2(&a,&b); //地址传递 13. printf("a = %d b = %d",a,b); 14.} **

1.程序未执行前的状态:

这一次我们标注好了Main函数中变量a和变量b的地址,(下面那个打错了,应该是swap2的函数作用区域)在这里插入图片描述

. 2. 当程序执行到第12行时候:由于&a和&b代表的是地址,即参数是地址,程序执行的是地址传递的方式,地址传递不同于值传递,此刻的变量a和变量b会把自己的地址传递给变量x和变量y: 在这里插入图片描述 3.那么后续中对swap2函数中的操作:

1.void swap2(int* x,int* y) 2.{ 3. int temp; 4. temp = *x;// *是代表把指针变量x所存储地址(x当中存储的是2000 也就是main函数中变量a的地址) 的对应内容(地址2000(即变量a的地址)对应的内容是12)交给temp; 5. *x = *y;// 把指针变量y存储的地址 对应的内容 交给 指针变量x存储的地址 对应的空间 6. *y = temp;//同上理 7. printf("x = %d y = %d\n",*x,*y); 8.}

这样实际上在swap2函数中对地址的操作,实际上是在对main函数中的变量内容进行操作,所以最后的结果为: 在这里插入图片描述

更多C语言的注意事项,请大家关注这个文章~,我会不断更新:

C语言程序设计(谭浩强版本)-考研版注意事项-适合考研和C语言入门小白食用

有喜欢算法的小伙伴可以一起关注算法~:

牛客网-面试必刷100题

感谢大家的支持~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3