c++ cosnt 修饰变量, 则 变量将变为 常量
编译器没有为 const 常量分配空间, const 常量存在符号表中
使用的时候是从符号表中取值
当对const常量进行取地址操作(extern)的时候,编译会在内存中为这个常量临时开辟空间
但是 const常量 并不会使用这个块空间,取值还是从符号表中取值
常量 #define 和 const 区别
1、宏在预处理的时候处理 做的是完全替换
const 是在编译期间进行处理
2、const 常量会做 类型检测、作用域检测
const常量作用和变量作用域是一样的
宏的作用域:从宏定义的位置开始到文件结束 或者 撤销宏为止
#define PI 3.14
#undef PI 宏撤销
#include <stdio.h>
// c++ cosnt 修饰变量, 则 变量将变为 常量
// 编译器没有为 const 常量分配空间, const 常量存在符号表中
// 使用的时候是从符号表中取值
// 当对const常量进行取地址操作(extern)的时候,编译会在内存中为这个常量临时开辟空间
// 但是 const常量 并不会使用这个块空间,取值还是从符号表中取值
int main1()
{
const int a = 10;
int *pa = (int *)&a;
*pa = 20;
printf ("a = %d\n", a);
printf ("*pa = %d\n", *pa);
printf ("&a = %p\n", &a);
printf ("pa = %p\n", pa);
return 0;
}
// 常量 #define 和 const 区别
//1、宏在预处理的时候处理 做的是完全替换
// const 是在编译期间进行处理
//2、const 常量会做 类型检测、作用域检测
#define NUM 10
const int num = 10;
void func()
{
const int value = 1; // const常量作用和变量作用域是一样的
// 宏的作用域:从宏定义的位置开始到文件结束 或者 撤销宏为止
#define PI 3.14
// #undef PI 宏撤销
}
int main()
{
printf ("NUM = %d\n", NUM);
// printf ("NUM = %d\n", value);
printf ("NUM = %f\n", PI);
return 0;
}