附上代码一份,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;
}