0.概述
在C语言中,const是一个限定符。主要作用是使限定的变量只读,有些教课书把它翻译成“常量”,而我个人更愿意把它翻译成“只读变量”。
const int a = 10; //声明 int 型变量a为只读。
int const b = 10; //同上面声明方式完全一样,习惯上更倾向于第一种写法
注意:const只读变量必须在声明的同时进行初始化,因为此刻如果不初始化,在后面将无法再次对其赋值。
关于存放位置:
在我们的PC机中,其存放位置和普通变量并无区别,若在main函数中定义,则编译器将其分配在栈中。若其是全局变量,则其存放在静态存储区中。
1.一个经典问题:const int* ptr与int* const ptr的区别?
答:
1)const int* ptr是指向const int的指针,其指向地址中的内容不可改变(*ptr不可修改),而指针本身的指向是可以修改的(ptr可以修改)。
2)int* const ptr是指向int的const指针,其指向地址中的内容可以改变(*ptr可以修改),而其本身的指向是不可以修改的(ptr不可以修改)。
int main(void)
{
int a = 10;
int b = 11;
const int* ptr1 = &a; //将指针指向a
ptr1 = &b; //将指针指向b,没有报错,证明指针的指向可以改变
*ptr1 = 20; //error!! 试图通过指针改变b的值,指针指向的内容不可修改!
return 0;
}
int main(void)
{
int a = 10;
int b = 11;
int* const ptr1 = &a; //将指针指向a
*ptr1 = 20; //可以通过指针修改a的值
ptr1 = &b; //error!! 试图修改指针的指向
return 0;
}