C语言常量指针和指向常量对象的指针 | C语言

在讨论常量指针和指向常量对象的指针之前,必须先明确什么是指针

指针

指针(pointer)是对数据对象或函数的一种引用;
指针代表了一个对象或函数的地址类型
被声明的指针(名称)也是一个对象

int var = 8848;
int* ptr = &var;

ptr 是指向变量 var 的 int 型指针对象

常量指针和指向常量对象的指针

常量指针
定义常量指针时,必须初始化该指针,因为以后不能修改它的值。

int var = 8848;
int var_c = 8086;
int* const ptr = &var;

*ptr = 1024;	//OK
ptr = &var_c;	// Error: assignment of read-only variable 'ptr'. 
// prt被const修饰,是一个常量指针,是只读的 

第三行的const后紧跟指针ptr,这个const是修饰ptr这个对象的,称ptr是一个常量指针。
指向常量对象的指针

int var = 8848;
int var_c = 8086;
int const * ptr;	// 与下一行是等价的
const int* ptr;		// 与上一行是等价的

ptr = &var_c;	// OK
*ptr = 1024;	// Error

上述例子中的const修饰的是*ptr,所以*prt是只读的。但是ptr才是指针对象,ptr并不是一个常量。

小结

常量指针(指向某对象的常量指针),强调指针本身是一个常量。
指向常量对象的指针,强调指针指向的对象是一个常量。
当然也有指向常量对象的常量指针(const int* const prt = &var;)

猜你喜欢

转载自blog.csdn.net/qq_40759015/article/details/114363274