const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新

本文探讨了C/C++中常量的特性,如常量Pi的定义与初始化,以及指针如何试图修改常量的值。通过实例展示了常量在内存分配和运行时行为。同时,对比了常量指针和普通指针的区别,揭示了常量在程序中的约束和优化机制。
摘要由CSDN通过智能技术生成
#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 = &Pi;//失败
	//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属性
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值