C语言Const变量

附上代码一份,const修饰的局部变量,指针,以及全局变量的权限问题。

/*const变量*/
#include <stdio.h>

#define uint unsigned int
const int globalVar = 10;  /*const定义的全局变量,在.data的只读区域,该区域内存地址不能够访问,
							所以一定是不能够修改的*/

/*const 定义的局部变量并不是存在.data段中;所以变量的地址是可以访问的;
但是const修饰的全局变量,因为是全局变量,所以存储在.data段的只读区域,该地址是无法
访问的,所以我们无法通过指针来修改这些全局变量*/

void ReadConstVar(void)
{
	uint num;
	const int localVar = 20;	
	int *pLocal = &localVar;  /*编译警告*/
	int *pGlobal = &globalVar; /*编译警告*/
	*pLocal = 200;		/*通过指针修改const修改的局部变量,编译的时候,会警告,但是执行结果正确*/
	//*pGlobal = 100; /*通过指针修改const修饰的全局变量,编译警告,执行错误,segmentation fault,访问了不该访问的内存*/				
						
	printf("localVar = %d.\n",localVar);
}

int main(void)
{
	int localVar = 10;
	const int *pConst01 = &localVar; /*pConst指针是可以改变的,但是指向的变量是不可变的*/
	int	const *pConst02 = &localVar;  /*同上*/
	int *const pConst03 = &localVar;  /*修饰的指针不可以改变,但是指向的变量是可变的*/ 	
 	pConst01 = &globalVar; /*正确*/
	//*pConst01 = 200;  /*编译报错*/
	
	pConst02 = &globalVar; /*正确*/
	//*pConst02 = 200;  /*编译报错*/
	
	//pConst03 = &globalVar; /*编译报错*/
	*pConst03 = 200;  /*正确*/

	ReadConstVar();
	return 0;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值