存储类别1:自动变量 自动变量也被称为局部变量(Local Variables) 自动变量的默认性质 自动存储生存期:所在函数被调用时自动分配存储空间,函 数返回时存储空间销毁 块作用域:变量从其声明点开始,直到所在块结尾的区域内 可见 必无链接 C99不强制在函数开始处声明变量,因此C99中变量作 用域可能非常小 void f(void) { int scope of i 11
存储类别1:自动变量 自动变量也被称为局部变量(Local Variables) 自动变量的默认性质 自动存储生存期: 所在函数被调用时自动分配存储空间,函 数返回时存储空间销毁 块作用域: 变量从其声明点开始,直到所在块结尾的区域内 可见 无链接 C99不强制在函数开始处声明变量,因此C99中变量作 用域可能非常小 11
自动变量示例 1 int sum_digits(int n) 2{ 3 int sum 0;/auto(local)variable 1*/ 4 5 while (n 0) 6 { 7 int temp;/auto(local)variable 2*/ 8 temp n 10; 9 sum +temp; 10 n/=10; 11 } 12 13 return sum; 14} 12
自动变量示例 12 1 int sum_digits(int n) 2 { 3 int sum = 0; /* auto(local) variable 1*/ 4 5 while (n > 0) 6 { 7 int temp; /* auto(local) variable 2*/ 8 temp = n % 10; 9 sum += temp; 10 n /= 10; 11 } 12 13 return sum; 14 }
函数形参作用范围 函数形参和自动(局部)变量具有相同的性质: 自动存储生存期、块作用域 ■注意与函数原型作用域相区别, 后者仅指函数 原型中 形参在调用时是自动初始化的,自动将实参的 值赋值给形参 13
函数形参作用范围 函数形参和自动(局部)变量具有相同的性质: 自动存储生存期、块作用域 注意与函数原型作用域相区别,后者仅指函数 原型中 形参在调用时是自动初始化的,自动将实参的 值赋值给形参 13
存储类别2:静态无链接 静态无链接变量也可称为静态局部变量(Static Local Variables) ■声明方式:自动变量声明时加上static关键字 具有静态生存期的变量在整个程序运行的期间一直占有存 储空间,不会销毁 void f(void) { static int i; /static local variable * 但静态局部变量的作用域仍然是局部的,局限于块内或函 数体内部 14
存储类别2:静态无链接 静态无链接变量也可称为静态局部变量(Static Local Variables) 声明方式:自动变量声明时加上static关键字 具有静态生存期的变量在整个程序运行的期间一直占有存 储空间,不会销毁 但静态局部变量的作用域仍然是局部的,局限于块内或函 数体内部 14 void f(void) { static int i; /* static local variable */ ... }
存储类别3:寄存器变量 ■以registerf修饰 register int quick; 寄存器变量只是一种请求,请求编译器将该变 量分配在寄存器中 ■编译器完全可以忽略该请求 目前完全没必要使用此特性,编译器自己会处 理好是否在寄存器中分配变量 15
以register修饰 register int quick; 寄存器变量只是一种请求,请求编译器将该变 量分配在寄存器中 编译器完全可以忽略该请求 目前完全没必要使用此特性,编译器自己会处 理好是否在寄存器中分配变量 存储类别3:寄存器变量 15