聊一聊C语言的参数传递
本讲我们和大家一起来聊一聊C语言中有关参数传递的一些知识。 1. 问题引入 请写出以下程序的打印结果。 #include <stdio.h> // 将某整数加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,所以系统会先分别给这两个函数分配内存