天人合一之毕设——准备阶段9 C语言的传参形式
2018-03-05 19:38
302 查看
C语言有三种传参方式,传值、传引用、传地址,但是传引用和传地址本质也是值传递。
有几篇讲解的很好,http://blog.csdn.net/wenhao_ir/article/details/51611388
https://www.nowcoder.com/questionTerminal/b296e9e1c40542ec8677c1e452b6b576
http://blog.csdn.net/azhexg/article/details/9311933
下面为了区别,我们先这么称呼各种访问方式。
在我所做的毕设内容中,这三种方式对 对象的内外层访问都有影响,所以特来深入探讨下。
1.单纯传值:值传递是传递了原有对象的一个副本,调用函数可以改变副本的值,但是对原有对象没有任何影响
(1)外层
比如:Exchg1(a,b)
int x=a;//←
int y=b;//←注意这里,这两行是调用子函数时的隐含操作
所以在外层其实是访问了a、b的。
(2)内层
主要是就是对形参x、y的访问,与a、b无关
2.传地址
形式1为:Exchg2(int *px, int *py) { ... }
Exchg2(&a,&b);
(1)外层
隐含操作:px=&a;
py=&b; //将&a,&b的值赋值给了px,py
这样外层只有一个取地址操作,并没有涉及到对a对象本身数据的操作,应该不算是对a、b进行访问了把(?)
(2)内层
对*px,*py的操作应该也就是对a,b变量本身的操作了把(?)
形式2为:Exchg2(int *px, int *py) { ... }
int *a, int *b;
Exchg2(a,b);
(1)外层 操作应该是 px = a,*py = b吧
应该是让两个指针指向同一区域,那这样没算访问了a对象吗?(不算吧?)
(2)内层
对*px,*py的操作应该也就是对a,b变量本身的操作了把?
3.传引用
形式为:Exchg3(int &x, int &y) { ... }
Exchg3(a,b); //x,y分别引用了a,b变量
(1)外层
隐含操作: 引用就是起别名
将x、y的名字赋给a、b,应该不算对a、b对象的访问
(2)内层
函数里头操作的其实就是实参a,b本身了
有几篇讲解的很好,http://blog.csdn.net/wenhao_ir/article/details/51611388
https://www.nowcoder.com/questionTerminal/b296e9e1c40542ec8677c1e452b6b576
http://blog.csdn.net/azhexg/article/details/9311933
下面为了区别,我们先这么称呼各种访问方式。
在我所做的毕设内容中,这三种方式对 对象的内外层访问都有影响,所以特来深入探讨下。
1.单纯传值:值传递是传递了原有对象的一个副本,调用函数可以改变副本的值,但是对原有对象没有任何影响
(1)外层
比如:Exchg1(a,b)
int x=a;//←
int y=b;//←注意这里,这两行是调用子函数时的隐含操作
所以在外层其实是访问了a、b的。
(2)内层
主要是就是对形参x、y的访问,与a、b无关
2.传地址
形式1为:Exchg2(int *px, int *py) { ... }
Exchg2(&a,&b);
(1)外层
隐含操作:px=&a;
py=&b; //将&a,&b的值赋值给了px,py
这样外层只有一个取地址操作,并没有涉及到对a对象本身数据的操作,应该不算是对a、b进行访问了把(?)
(2)内层
对*px,*py的操作应该也就是对a,b变量本身的操作了把(?)
形式2为:Exchg2(int *px, int *py) { ... }
int *a, int *b;
Exchg2(a,b);
(1)外层 操作应该是 px = a,*py = b吧
应该是让两个指针指向同一区域,那这样没算访问了a对象吗?(不算吧?)
(2)内层
对*px,*py的操作应该也就是对a,b变量本身的操作了把?
3.传引用
形式为:Exchg3(int &x, int &y) { ... }
Exchg3(a,b); //x,y分别引用了a,b变量
(1)外层
隐含操作: 引用就是起别名
将x、y的名字赋给a、b,应该不算对a、b对象的访问
(2)内层
函数里头操作的其实就是实参a,b本身了
相关文章推荐
- 天人合一之毕设——准备阶段——1 初识malloc
- 天人合一之毕设——准备阶段8 进阶正则表达式
- 天人合一之毕设——准备阶段——Java图建立与遍历
- 天人合一之毕设——准备阶段—— 2 函数调用图(call graph)
- 天人合一之毕设——准备阶段7 我遇到的有关栈的错误
- 天人合一之毕设——准备阶段——3 HME仿真器
- 天人合一之毕设——准备阶段——4 字典benchmark
- 天人合一之毕设——实践阶段4——棘手的return语句
- 天人合一之毕设——实践阶段7—— 画图
- python开发准备阶段
- 7_18|C语言|判断浮点数等于0|浮点数的保存形式
- C语言常用的代码组织形式--多文件
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
- 架构师的第一阶段:准备做(Pre-Architecture)
- IT项目经理手册(二)--调研准备阶段容易犯哪些错误?
- Python中globals和locals的区别-pybatis的准备阶段(六)
- C语言高级测试:为C程序员准备的0x10个最佳问题
- 1、准备阶段
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
- CI 框架 接受get数据(问号传参形式)