所有的数据都有两种类型
数据类型: 如 int,float 等
存储类型: 总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。
(1)auto - 函数中所有的非静态局部变量。
(2)register - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量。
(3)static - 在变量前加上 static 关键字的变量。
(4)extern - 把全局变量在其他源文件中声明成 extern 变量,可以扩展该全局变量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。
#include <stdlib.h>
#include <iostream>
using namespace std;
extern int extern_value;
static int yahuan_xiaoli = 24;//全局静态变量
//int yahuan_extern = 30;
//寄存器变量
void register_demo() {
register int j = 0;
printf("j: %d\n", j);
//C++ 的 register 关键字已经优化,如果我们打印它的地址,它就变成了
//普通的 auto 变量
for (register int i = 0; i < 1000; i++) {
//....
}
printf("&j : 0x%p\n", &j);
{
int k = 100;
k += j;
}
printf("register_demo - register_demo: %d\n", yahuan_xiaoli);
}
//局部静态变量
void static_demo() {
static int girl = 18;
int yahuan = 17;
++girl;
++yahuan;
printf("girl: %d yahuan: %d\n", girl, yahuan);
printf("static_demo - register_demo: %d\n", yahuan_xiaoli);
}
//外部变量
void extern_demo() {
extern_value++;
printf("extern_value:%d\n", extern_value);
}
int main(void) {
int i = 0; //C 语言的 auto 不会报错,C++ auto 已经升级啦
//register_demo();
//static_demo();
//static_demo();
//static_demo();
extern_demo();
system("pause");
return 0;
}
常见错误:
1. 申请的内存多次释放
2. 内存泄漏
3. 释放的内存不是申请时的地址
4. 释放空指针
5. 释放一个内存块,但继续引用其中的内容
6. 越界访问