const 全局和局部变量


const 作为局部变量 初始化为常量表达式 需要定义在头文件中 可以被多个文件共享

const 作为全局变量 初始化不是常量表达式 不可以定义在头文件中 需要定义在源文件中 为了能使多个文件共享 需要在头文件中声明 添加extern

// const 修饰的 全局变量,放在常量区, 一旦初始化,不能直接修改,也不能通过指针修改
const int g_c = 10;
__unused static void test10()
{
    // 拿到g_c的内存地址
    int *p = (int *)&g_c;
    // 通过指针修改这块内存的值
    *p = 200;
    // 运行报错: Thread 1: EXC_BAD_ACCESS (code=2, address=0x100000fac)
}

// const 修饰的 布局变量,放在栈上,一旦初始化不能直接修改,但是可以通过指针间接修改
static void test11()
{
    const int a = 10;
    int *p = (int *)&a;
    *p = 200;
    // 修改成功
}

附件: