C语言基础学习笔记:变量作用域、形参与实参
图:联盟号飞船(Soyuz)
Guderian出品
C
语言中,作用域较小的局部变量隐藏作用于较大的局部变量。如:1
2
3
4
5
6
7
8
9
10
11
int main()
{
int a = 1, b = 2;
{
int a = 3, b = 4;
printf("a = %d, b = %d\n", a, b);
}
printf("a = %d, b = %d", a, b);
return 0;
}输出结果为:
1
2a = 3, b = 4
a = 1, b = 2C
语言中,局部变量隐藏全局变量。形参与全局变量同名不会相互干扰。实参(argument):在调用函数时传递给函数的参数,在调用时有确定的值
形参(parameter):在定义函数名和函数体时使用的参数,目的是接收调用该函数时传入的参数。
总之,只要同名的变量出现在不同的作用域内二者互不干扰,编译器有能力区分不同作用域中的同名变量。
编译器如何区分不同作用域的同名变量呢?编译器没有变量名这个概念,只知道内存地址,通过将同名变量映射到不同的内存地址来实现作用域的划分,如全局变量位于
RAM
中的静态存储区,局部变量位于RAM
中的动态存储区。(1)只读存储区
- 存放机器代码和常量等只读数据
(2)静态存储区
- 存放全局变量和静态变量等
- 静态——发生在程序编译或链接时
(3)动态存储区
- 包括堆和栈。其中栈用于保存函数调用时的返回地址、形参、局部变量等
- 动态——发生在程序载入和运行时
【更多C语言系列】