变量一共有4种存储类型分别为:
1.自动变量(auto)。
2.静态变量 (static)。
3.外部变量(extern)。
4.寄存器变量(register)。
一、自动变量(auto):
函数中所有的非静态局部变量。
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
void exercise(){
//自动变量
int i = 0;
printf("i=%d\n",i);
{
//自动变量
int c = 0;
printf("c=%d\n",c);
}
//c语言方式可以加上
//auto int p = 0;
}
int main(void){
//自动变量
int j = 0;
//c++方式会自动判别该数据为什么类型
auto d = 0;
exercise();
printf("j=%d d=%d\n",j,d);
system("pause");
return 0;
}
二、寄存器变量(register):
(不属于内存,不可以取地址)。
一般经常被使用的变量(例如一个变量需要计算几千次)可以设置成寄存器变量,register变量会被存储在寄存器中,计算速度远快于存在内存中的非register变量。
打印寄存器变量地址会被降级处理。(转换成自动变量)
不能定义为全局变量。
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
void exercise(){
register int i = 0;
printf("i=%d\n",i);
//打印地址的时候会发现可以打印,这是因为在C++里(被优化)会自动
//把寄存器变量(register)i自动降级成为自动变量(auto)i。
printf("i=0x%p\n",&i);
}
int main(void){
exercise();
system("pause");
return 0;
}
三、静态变量 (static):
1.只会被定义一次
2.全局存在
3.局部静态变量只能在该函数内部调用,但全局存在。
4.全局静态变量,在它之下的代码区都可以访问,并全局存在。
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
//全局静态变量
static int i = 0;
void exercise(){
i = 15;
printf("i = %d\n",i);
//局部静态变量
static int j = 12;
printf("j = %d\n",j);
}
int main(void){
exercise();
system("pause");
return 0;
}
四、外部变量(extern):
全局变量在其他源文件中声明成extern变量,可以扩展该全局变量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。
#include <stdio.h>
int extern_value = 888;
另一个cpp文件中:
#include <iostream>
#include <Windows.h>
extern int extern_value;
int main(void){
printf("extern_value = %d\n",extern_value);
system("pause");
return 0;
}
生命周期和作用域: