第十二章C语言中用户标识符的作用域 和存储类 12.1局部变量、全局变量和存储分类 用户命名的标识符都有一个有效的作用域 作用域:指标识符在程序某一部分中有定义 能被C编译和连接程序所识别 根据变量出现在程序中的不同位置,分为局 部变量(内部变量)和全局变量(外部变量)
第十二章 C语言中用户标识符的作用域 和存储类 12.1 局部变量、全局变量和存储分类 •用户命名的标识符都有一个有效的作用域 •作用域:指标识符在程序某一部分中有定义, 能被C编译和连接程序所识别。 •根据变量出现在程序中的不同位置,分为局 部变量(内部变量)和全局变量(外部变量)
12.1局部变量、全局变量和存储分类 局部变量:在函数内部或复合语句内部定 义的变量。函数的形参也是局部变量(可 一以说明为自动类和静态类) 外部变量:在函数外部定义的变量(只能 说明为静态类) 四个有关的说明符:auto、 register、 static、 extern auto int 1,j;或者 int auto 1,ji;
12.1局部变量、全局变量和存储分类 局部变量:在函数内部或复合语句内部定 义的变量。函数的形参也是局部变量(可 以说明为自动类和静态类) 外部变量:在函数外部定义的变量(只能 说明为静态类) 四个有关的说明符:auto、register、static、 extern auto int i,j;或者 int auto i,j;
动态存储区(堆栈) 静态存储区 程序代码区 122局部变量及其作用域和生存期 1221auto变量
动态存储区(堆栈) 静态存储区 程序代码区 12.2局部变量及其作用域和生存期 12.2.1 auto变量
auto变量:在函数内部或复合语句中定义时 若没有指定存储类或使用了auto说明符 float a;等价于 auto float a; 自动变量:它的作用域从定义的位置起到函 数体结束止。如书p170的一段程序。 注意:无初值的自动变量其值不定 不同函数中使用了同名变量不会互相影响
注意:无初值的自动变量其值不定 不同函数中使用了同名变量不会互相影响 auto变量:在函数内部或复合语句中定义时 若没有指定存储类或使用了auto说明符 float a;等价于 auto float a; 自动变量:它的作用域从定义的位置起到函 数体结束止。如书p170的一段程序
1222 register变量 寄存器变量也是自动变量 区别:变量的值保留在CPU的寄存器中,不占内存单元 优点:有助于提高程序的运行速度。 例121计算Xn maino f int S; s=power(5, 3) printf(“%dn”),S) power(int x, register int n) register int p for(p=1; n; n--)p=p*X return p
12.2.2 register变量 寄存器变量也是自动变量 区别:变量的值保留在CPU的寄存器中,不占内存单元。 优点:有助于提高程序的运行速度。 例12.1 计算Xn main() { int s; s=power(5,3); printf(“%d\n”),s); } power(int x,register int n) { register int p; for(p=1; n; n--) p=p*x; return p; }