#include <stdio.h>
void ConstTest(int a);
//#define Pi 3.14
const float Pi = 3.14;//常量在程序中是无法赋值的,所以定义的时候就要初始化
//枚举类型里面的元素都是常量,枚举变量的赋值,只能在这几个常量中挑选赋值
int main(int argc, char* argv[]) {
float r = 1.1f;
double S = double(Pi * r * r);
const float* p = Π//失败
//1.编译器给Pi分配内存空间,原本打算通过指针修改常量值,但是指针也要求常量
printf("调试等待,修改Pi内存值为4\n");
printf("%f", Pi);//失败
//2.直接调试的时候修改内存值,发现不起效
//当程序进行运行的时候,编译器直接把所有的Pi替换成了3.14,
//输出函数不再读取Pi对应内存中的值,也就是说你直接改Pi内存空间的值也没用
//又有点像宏替换,但是宏替换不分配内存空间,这是编译器优化的结果
const float x = r;
printf("调试等待,修改Pi内存值为4\n");
printf("%f", Pi);//失败
ConstTest(1);
return 0;
}
void ConstTest(int a) {
const int P = a;//如果常量P的值依赖于别的变量会怎么样,所以可以
printf("调试等待,修改Pi内存值为4\n");
printf("%d", P);//成功
//修改P对应的内存内部的值,成功执行,也就是说输出函数,取了P内存中的值
}
#include <stdio.h>
int main(int argc, char* argv[]) {
const int P0 = 3; //VIP专享变量
const int* p0 = &P0;//表示p0指针指向是常量类型
int P1 = 4;
int const * p1 = &P1;//表示p1指针本身是常量类型
const int const* p3 = &P0;//表示P3指针是常量,指向的变量也是常量类型 //VIP专享指针
//必须要一个常量指针才能指向常量吗
int* px = (int*)&P0;//强制const int*转换int*
int* PX = const_cast<int*>(&P0);//去掉P0的const属性
}