一、”const int” 与 “int const”
我们需要明白,const放在数据类型(int)前面和数据类型(int)后面是一样的。所以,
const int *ptr 与 int const *ptr 是等价的
二、简单理解“const int *ptr”, “const int * const ptr”, “int * const ptr”的本质含义
在英文里面,”*“ 被念做 " pointer to ",朗读的顺序是从右到左。所以,
const int *ptr = ptr pointer to const int(指向常量的指针)
int const *ptr = ptr pointer to const int(指向常量的指针)
int * const ptr = const ptr pointer to int(指向整型的指针常量)
const int * const ptr = const ptr pointer to const int(指向常量的指针常量)
指向常量的指针,是指指针本身并不是常量,而指针所指向的内容是一个常量。因此,指向常量的指针,指针本身可以被修改,但*ptr也就是指针所指向的内容不能被修改。
指向整型的指针常量,是指指针本身是常量,而指针所指向的内容不是常量。因此,指向整型的指针常量,指针本身不能被修改,而指针所指向的内容可以被修改。
指向常量的指针常量,按照前面所说,是指指针本身是常量且指针所指向的内容也是常量。因此,指向常量的指针常量,指针本身和指针所指向的内容都不能被修改。
三、ptr++和*ptr++的合法性
按照二里面的分析,
const int *ptr 和 int const *ptr,ptr++合法,但 *ptr++ 不合法;
int * const ptr,ptr++ 不合法,但 *ptr++ 合法;
const int * const ptr,两者均不合法。