- 在这里将会讨论const修饰指针的常见三种形式, const关键字在C语言中修饰变量,表示这个变量是常量,指针变量也是变量
1)第一种:int const *p等价于 const int *p 此时p本身不是const的,但是p指向的变量是const类型的
2)第二种:int * const p; 此时表示 p本身是const ,但是p指向的变量不是const类型的
2)第三种: const int * const p ;此时p本身是const类型的,p指向的变量也是const类型的
#include <stdio.h>
int main(void)
{
//const int* p1;
//int const* p2;
int* const p3;
int a;
const int * const p4;
//下面开始对上面定义的开始赋值,看下报错情况,经过编译,发现p1和p2都是const类型,不能被继续赋值
//*p1 = 3; //此时p1本身就是一个const 类型,这样写回报错:error C2166: 左值指定 const 对象
//*p2 = 5; //同样报错:error C2166: 左值指定 const 对象
//*p3 = 9;
*p4 = 5; //报错
}
2,const 修饰的变量也是有办法可以改的
上图的const类型是没有办法修改的,但是请看下图
const类型的变量就已经更改成功了。
3,今天遇到的问题,也提出来给大家看看
int* const p3=9; //对于常指针,定义的时候就应该初始化一下,
//因为如果不初始化,局部变量会分部在栈上,会随机给个值
//如果我这样写,就是错的!
int* const p3; //此时就是错的,因为如果不初始化,局部变量会分部在栈上,会随机给个值
p3=9; //此时再次赋值,相当于把指针指向的变量的值改了