知识点:
数据类型: 如 int,float 等
存储类型: 总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。
auto - 函数中所有的非静态局部变量。-C支持auto int i;-C++不支持;C++支持auto i = 0;自动识别i为int型.
register - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量。-C++优化:自动将计算量大的存为寄存器变量-无需定义;不可全局使用
static - 只初始化一次
extern - 把全局变量在其他源文件中声明成 extern 变量,可以扩展该全局变量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。
示例:
#include <stdio.h>
#include <stdlib.h>
//#include "extern_static.h"
//①自动变量auto:未特殊声明也未多次使用的变量默认为auto
/*/②寄存器变量register
void register_demo(){
register int r = 0;
printf("register demo-register int: &r=0x%p\n", &r);//打印地址时register降级为内存变量,分配地址;寄存器变量无地址
}*/
//③静态变量static:永远只定义时初始化一次;不可在其他文件中调用
static int servant = 24;//全局静态变量
void house(){
static int princess = 18;
int prince = 10;
princess++;
servant++;
prince++;
printf("house-princess=%d ", princess);
printf("house-servant=%d ", servant);
printf("house-prince=%d\n", prince);
}
//④外部变量extern:在其他cpp文件中定义赋值后在此cpp文件中定义/声明;见memory leak中extern worker = 30;
extern int worker;
//×③④外部静态变量:编译不会出错,但调试时出错;不可在其他文件中加extern调用
//⑤全局变量global:可在其他文件中加extern调用
int mom = 40;
//④⑤全局外部变量:在其他文件中加extern调用
int beauty = 20;
int main6(){
//---------①----------
//auto int i = 0;C++×,C√
auto i = 0;//C++√,C×
int j = 1;//默认自动为auto,C√,C++√
//---------②----------
//register_demo();
//---------③----------
printf("static int servant = %d\n", servant);//24
house();//19 25 11
house();//20 26 11
//---------④----------
printf("extern worker = %d\n", worker);
//---------③④----------
//externStatic();×-无法解析的外部符号int servant
//---------⑤----------
printf("mom = %d\n", mom);
//---------④⑤----------
externInt();
system("pause");
return 0;
}