函数是一种特殊的控制流程,一般的控制流程有,顺序、选择和循环。而函数是集三者与一体的控制流程。
1、函数的本质
C语言中函数的代码存储在内存中的代码段中,每一个C语言程序都会有一个代码段。本质是一段二进制可执行代码,这些代码可以被机器直接执行的指令。函数名,本质是一个标号,该标号的值等于内存中存储函数代码的内存空间首地址。
所有的函数中定义的局部变量都存储在函数的栈帧上(有一个例外,往下看),也就是栈空间中。当函数调用结束后,栈帧就消失了。
以上为函数的栈帧。
2、变量的作用域和生命期
C语言中的每一个变量都有自己的作用域和生命期,主要是存储的位置不同,决定了它们的生存周期不同。局部变量主要存放在栈帧上,而全局变量和static 修饰的变量都存放在数据段上。
全局变量,也称为外部变量,其作用域是从定义该变量的这一行开始,到定义该变量的源文件结束,在该区间内,所有的函数都可以引用该变量。其中有一个例子,值得注意:
#include
int add(int a, int b)
{
return a+b;
}
int b = 10;//此处才开始定义全局变量
int mul(int a)
{
return a * b;
}
int main(void)
{
int resl;
int res2;
resl = add(1,5);
res2 = mul(1);
printf("res1 = %d",res1);
printf("res2 = %d",res2);
return 0;
}
int b;
int add(int a)
{
return a+ b;
}
int b = 10 ;
会不会有疑问,如果此时调用add(10)结果是10还是20;答案是20.可以在VC 6.0验证一下代码。
我为什么会有这样的疑问,因为对于全局变量的定义,如果没有初始化,则默认为0。