int const*与int * const

1. int const*

从右往左看,进行解析,这个p是个指针,而且是个常量,类型是整型。可称为指针常量

  
  

特点:*p指向一个整型的常量,但是不能通过修改p所指向内存单元的值,只能修改所指向的对象,或者通过改该对象的值。
such as:

   
int a = 10;
int b = 20;
int c = 55;
int const *p = &a;
const int *q = &b;     //与上面一样
p=&c;						//可以通过,允许修改所指向的对象
q=&a;
*p=34;                  //不允许通过,无法通过该指针修改内容
*q=123;	
			//同上                
p=q;
					//可以通过
p=&a;					//重新指向a,通以修改a的值,修改p中的值
a=456;		

2. int * const p

从右往左看,一个常量p被定义为整型指针。可称为常量指针

  
  

特点:常量p是一个整型类型的指针,它能通过指针来进行修改其中的内容,但当它已经指向一个地址之后,便不能再指向其他地址,和int const*有区别

int b = 20;
int c = 55;
int * const p = &a;
int *const q = &b;
*p=34;							//可以将p所指向的地址进行修改

a=894;							//也可以通过修改a的值,使p的值进行更改

p=&c;							//该操作不被允许,已经指向一个地址,无法指向其他地址

p=q;								//该操作也不被允许,除非p还没进行初始化

结合上面两个,可以看做常量指针常量,即常量p是一个整型的指针,而且这个指针还是个常量

特点:结合上面两个,将两个都不能允许的操作,在这也全部不允许——不允许当p初始化后,再将p指向其他地址;不允许通过修改指针p的值

int a = 10;
int b = 20;
int c = 55;
const int* const p = &a;
const int* const q = &b;
 
 *p=456;							//该操作不被允许
 p=&c;								//该操作不被允许
 
a=333;								//允许该操作,进行修改值
const int* const r=p;		//允许该操作
发布了65 篇原创文章 · 获赞 25 · 访问量 1019

猜你喜欢

转载自blog.csdn.net/chongchujianghu3/article/details/104993749