详细解读C语言参数传递 |
您所在的位置:网站首页 › 传递函数的作用 › 详细解读C语言参数传递 |
指针变量作为函数参数 -值传递和地址传递区分
参考谭浩强版本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函数区域中的变量互不冲突的: 程序未执行前:
在前面一和二章节的基础之上,我们分析下面的例子: 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: 这样实际上在swap2函数中对地址的操作,实际上是在对main函数中的变量内容进行操作,所以最后的结果为: C语言程序设计(谭浩强版本)-考研版注意事项-适合考研和C语言入门小白食用 有喜欢算法的小伙伴可以一起关注算法~:牛客网-面试必刷100题 感谢大家的支持~ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |