变量属性
C语言中的变量可以有自己的属性,在定义变量的时候可以加上**"属性**"关键字。
属性关键字指明变量的特殊意义。
auto关键字
- auto是C语言中局部变量的默认属性。
- auto表明将被修饰的变量存储于栈上。
- 编译器默认所有的局部变量都是auto的。
代码示例
void f()
{
int i; // 局部变量默认属性为auto
auto int j; // 显示声明auto属性
}
register关键字
- register关键字指明将局部变量存储于寄存器中。
- register只是请求寄存器变量,但是不一定请求成功。
- register变量必须是CPU寄存器可以接受的值。
- 不能用&运算符获取register变量的地址。
代码示例
#include <stdio.h>
register int g_v; // error
int main()
{
register char var;
print("8x%88x", &var) // error
return 0;
}
static关键字
1、static关键字指明变量的静态属性。
static修饰的局部变量存储在程序静态区。
2、static关键字同时具有作用域限定符的意义。
static修饰的全局变量作用域只是声明的文件中。
static修饰的函数作用域只是声明的文件中。
代码示例
#include <stdio.h>
int g_v; // 全局变量,程序的任意地方均能访问
static int g_vs; // 静态全局变量,只有当前文件中可以访问。
int main()
{
int var; // 局部变量,在栈上分配空间。
static int var; // 静态局部变量,在静态数据区分配空间。
return 0;
}
实例分析
#include <stdio.h>
// 定义f1函数
int f1()
{
int r = 0;
r++;
return r;
}
// 定义f2函数
int f2(