作者:余小小
日期:2021-10-02
-
作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问
声明变量的三个区域
-
在函数或块内部的局部变量
-
在所有函数外部的全局变量
-
在形式参数的函数参数定义中
局部变量
-
某个函数或块的内部声明的变量称为局部变量
-
只能被该函数或该代码块内部的语句使用
-
局部变量在函数外部是不可知的。
-
局部变量被定义时,系统不会对其初始化,必须自行对其初始化。才能使用。
#include <stdio.h>
int main ()
{
/* 局部变量声明 */
int a, b;
int c;
/* 实际初始化 */
a = 10;
b = 20;
c = a + b;
printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
return 0;
}
全局变量
-
全局变量是定义在函数外部,通常是在程序的顶部。
-
全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量
-
全局变量可以被任何函数访问。
-
c语言没有垃圾回收器,所以结束程序就才会被消除
-
定义全局变量时,系统会自动对其初始化
#include <stdio.h>
/* 全局变量声明 */
int g;
int main ()
{
/* 局部变量声明 */
int a, b;
/* 实际初始化 */
a = 10;
b = 20;
g = a + b;
printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
return 0;
}
局部变量和全局变量的名称可以相同
当局部变量和全局变量的名称相同的时候,在函数内,会使用局部变量值,全局变量不会被使用。(就近原则)
#include <stdio.h>
/* 全局变量声明 */
int g = 20;
int main ()
{
/* 局部变量声明 */
int g = 10;
printf ("value of g = %d\n", g);
return 0;
}
形式参数
-
函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。
-
在定义函数中制定的形参,在没有出现函数调用时不占用内存中的存储单元。在函数调用时才分配内存
#include <stdio.h>
/* 全局变量声明 */
int a = 20;
int main ()
{
/* 在主函数中的局部变量声明 */
int a = 10;
int b = 20;
int c = 0;
int sum(int, int);
printf ("value of a in main() = %d\n", a);
c = sum( a, b);
printf ("value of c in main() = %d\n", c);
return 0;
}
/* 添加两个整数的函数 */
int sum(int a, int b)
{
printf ("value of a in sum() = %d\n", a);
printf ("value of b in sum() = %d\n", b);
return a + b;
}
实际参数
调用函数的时候,传入的 值(实参可以是变量,变量与表达式)
值传递
将实参的值传递给形参,是一个具体的值
址传递
传入的是一个地址 ,比如数组名
全局变量与局部变量在内存中的区别
-
全局变量保存在内存的全局存储区中,占用静态的存储单元;
-
局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
常用基本数据类型的默认值
数据类型 | 初始化默认值 |
---|---|
int | 0 |
char | ‘\0’ |
float | 0 |
double | 0 |
pointer | NULL |
暂无评论内容