#include <stdio.h>
int a; // 定义全局变量
int main()
{
a = 10; // 函数内可以访问
return 0;
}#include <stdio.h>
extern int a; // 声明另一个文件中存在的全局变量
void test(){
a = 12;
}
void test(){
auto int a; // 可以和全局变量重名,在此之后,访问的a都是局部变量
int b; // 省略auto(一般用法)
register int c; // 告诉编译器采用寄存器的方式存储变量(速度快,但是会不会做取决于编译器)
// 注:寄存器变量只能做局部变量或者形参,同时他无法取得地址
}
void test(){
static int sa=0; // 该语句只会执行一次
printf("%d\n", sa);
sa++; // 静态变量的内容继承自上一次调用(此处可以记录函数调用的次数)
}
void test2(){
static int sa=5; // 此处的sa和前面的sa不是一个变量
}这里我们定义的sa是静态变量,存储在静态存储区,他在整个程序周期是不能销毁的,但是不同于全局变量的是,这个变量只能在定义他的函数内访问。 volatile int a; // 采用volatile修饰的变量是直接通过地址访问的
int b = a;
int c = a;由于a是直接地址访问的,他可能会改变,b和c的值可能不同,在这里,如果我们不加volatile修饰词,编译器发现a的值没有被修改,则可能直接绕过变量a的地址,直接调用前一次得到的数值来操作。原文:http://blog.csdn.net/qq_25842885/article/details/43898071