首页 / C语言 / C语言的参数传递原理解析(值传递)
C语言的参数传递原理解析(值传递)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言的参数传递原理解析(值传递),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1109字,纯文字阅读大概需要2分钟。
内容图文
本讲我们和大家一起来聊一聊C语言中有关参数传递的一些知识。
1.问题引入
请写出以下程序的打印结果。
#include
// 将某整数加10
void add_by_10(int a){
a = a + 10;
}
int main(int argc, char *argv[]){
int a = 2;
add_by_10(a);
printf("a= %d\n", a);
上面的程序非常的简单,我们定义了一个函数add_by_10,它的功能是实现整数加10,然后在main函数中调用,由于a初始值为2,当调用函数了以后,a的值变成了12。
事实真是如此吗?如果你编译执行了这段程序,你会发现打印的结果是:"a = 2".
为什么会这样呢?这和你想的完全不一样。
2.问题分析
接下来我们就和大家一起来分析为什么会是这样的结果。
之前的文章我们讲过,所谓变量的定义其实就是从4G的内存条上去拿空间,如你定义了一个int a;其本质含义就是要从你新买的4G内存条上拿走一块4字节大小的空间,如下所示,黄色部分的空间就是属于a的,其他人不能用哈。
我们再将该问题深入一些,其实系统在分配内存时,是以函数为基本单元,如问题1中定义的程序,我们有两个函数main和add_by_10,所以系统会先分别给这两个函数分配内存,然后这两个函数内部的变量都会在各自函数所属的内存空间去拿内存。
在4G的内存条上有一部分区域是属于main函数的(黄色区域),还有一部分区域是属于add_by_10函数的(橙色区域),如下所示:
main函数中定义了一个int a;所以这个a会从main区域拿走4字节的空间(黑色区域),并赋值为2。另外add_by_10函数中有一个参数int a所以这个a也会从add_by_10区域拿走4字节空间(灰色区域),如下所示:
当在main函数中执行add_by_10(a)这行代码时,会将main函数a的值,赋给add_by_10函数的形参a,如下:
add_by_10函数中,对其所属的a变量执行了加10操作后,a变成了12,如下:
add_by_10函数调用结束后,将会释放add_by_10的内存空间。
从上面的一步一步分析,大家可以看到,其实main函数中的a一直都是2,并没有发生任何的改变,而改变的只是add_by_10函数中的a值。所以这就是为什么你最终看到的结果是:"a= 2"而不是"a= 12"。
请思考:怎样才能达到"a = 12"这个结果?
原文:http://www.cnblogs.com/wentujun/p/7707130.html
内容总结
以上是互联网集市为您收集整理的C语言的参数传递原理解析(值传递)全部内容,希望文章能够帮你解决C语言的参数传递原理解析(值传递)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。