const 与指针一起使用的几种情况

指向常量的指针

一个指向常量的指针变量。

1
const char  *pc = "abcd";   // 指针指向一个字符型常量

其中,不允许改变pc所指向的常量的值(如pc[3] = 'x'这是不允许改变的)。

pc只是一个普通的指针, 还可以指向其他地址(如: pc = "efgh")。

常指针

指针变量所指的地址是常量, 而地址中所存放的内容是可以改变的。

1
char * const pc = "abcd"

如 :

1
2
pc[3] = 'x';  //正确, 可以改变  
pc = "efgh"; //错误, 不允许改变指针pc的地址

指向常量的常指针

1
const char * const pc = "abcd"

这样的声明后,上面所说的两种改变的情况都不允许, 不能改变指针pc的指向(地址), 也不能改变地址中的值

总结

常量指针:指向常量的指针
性质:不能通过指针修改目标数据对象的值,但可以改变指针值,使其指向其他地方
示例一:int n=10;const int *p = &n;
典型使用场合:作为函数参数,表示函数内部不能修改指针所指向的目标数据对象值
示例二:void PrintObject(const int *p);
指针常量:指针指向的位置不可变化
性质:不可将指针指向其他地方,但可改变指针所指向的目标数据对象值
示例三:int n = 10; int *const p = &n;
指针常量和其他常量一样,必须在定义时初始化常量指针常量:指向常量的指针常量(指针的双重只读属性)性质:指针值不可改变,指向的目标数据对象值也不可改变
示例四:const int n = 10; const int *const p = &n;
典型使用场合:主要作为函数参数使用

▲ 来自《学堂在线》

const其实是左结合的, int * const其中const是作用在 *上。const int左边没东西, 只能作用在int上了。

其中常量指针用的比较多, 不能通过*p修改它的值,作为函数的参数传递。

感谢支持!