C++ 指针常量、常量指针和常指针常量

const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着“只读”。任何修改该变量的尝试都会导致编译错误。const是通过编译器在编译的时候执行检查来确保实现的(也就是说const类型的变量不能改是编译错误,不是运行时错误。)所以我们只要想办法骗过编译器,就可以修改const定义的常量,而运行时不会报错。
1、const离谁近,谁就不能被修改;
2、因为常量在定义以后就不能被修改,所以使用const定义变量时必须初始化。

一、指针常量

指针常量是指指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。

int *const p2 = &c; // *在前,定义为指针常量
int main()
{
    
    
	int a = 2;
	int b = 3;
	int *const c = &a;
	printf("albert:%p\n", c);
	c = &b;                     //报错:expression must be a modifiable lvalue	
	printf("albert:%p\n",c);
}
--------------------------------------------------------------------------
int main()
{
    
    
	int a = 2;
	int b = 3;
	int *const c = &a;
	*c = 4;
	printf("albert:%d\n",*c);   //4
}

二、常量指针

常量指针是指指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而指向另一个常量。

int const *p1 = &b; //const 在前,定义为常量指针
const int  *p1 = &b;
#改变指针b指向地址的内容
int main()
{
    
    
	int a = 2;
	int const *b = &a;
	*b = 3;          //报错:expression must be a modifiable lvalue	
	printf("albert:%d\n",a);
}
----------------------------------------------------------------------------
#改变指针b的指向
int main()
{
    
    
	int a = 2;
	int b = 3;
	int const *c = &a;
	printf("albert:%p\n", c);    
	c = &b;
	printf("albert:%p\n",c);
}

三、常指针常量

const   int * const *p1 = &b;
int const  *const p1 = &b;

常指针常量指针不能改变,指针指向的值也不能改变
例子综合以上两点吧,就不再进行说明了。

猜你喜欢

转载自blog.csdn.net/qq_52302919/article/details/123736322