02.const常量限制

02.const常量限制

  • c语言中常量一般通过宏定义使用:
# define PI 3.14
  • 但是宏定义实际上是字符的替换,宏定义的缺点是没有指明所定义常量类型
  • c++中使用const关键字来定义常量
const int PI = 3.14;
  • const关键字用于修饰变量,将变量变为常量
  • 常量一旦定义就没有办法进行修改,因此在使用const进行修饰变量时一定要给变量赋值
  • const关键字修饰的变量不能修改是指在程序的编译过程中不能修改,但是在程序运行过程中仍然可以通过修改地址的方式进行修改
int main(int argc, char** argv)
{
    
    
	const int c = 3;
	//c = 4;
	//取常量c的地址,因为常量c为const int类型,直接取地址会出错,因此需要取地址后强转为int* 类型
	//int* p = &c 会出错
	int* p = (int*)&c;
	printf("常量的值为:%d",c);
}
  • 在上面这个例子中,如果修改常量c的值编译过程中会报错,同样即使在程序运行过程中通过修改常量c的地址改变常量c的值也会发现printf打印出来后c的值没有发生变化,这是因为c++编译法人优化机制,对于已经清楚的常量在编译时会直接进行替换
  • 如果在程序编译时,程序不知道常量的值,此时不会发生优化进行直接替换,因此可以通过修改常量的地址对常量的值进行修改
int main(int argc, char** argv)
{
    
    
	const int c = argc;
	//c = 4; 报错
	int* p = (int*)&c;
	//此时如果修改常量c的地址,打印出c的值会发生变化
	printf("常量c:%d",c);
}

猜你喜欢

转载自blog.csdn.net/m0_45388819/article/details/113811712