所有的数据都有两种类型
数据类型: 如 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. 越界访问
posted on 2022-10-15 20:17  wshidaboss  阅读(151)  评论(0编辑  收藏  举报