常量指针、指针常量的识别技巧:
const读作常量,*读作指针,按照顺序读。 const int * ptr; //const读作常量,*读作指针,按照顺序读作常量指针。 int const *ptr; //const读作常量,*读作指针,按照顺序读作常量指针。 int * const ptr; //const读作常量,*读作指针,按照顺序读作指针常量。
-
常量指针(const pointer):
-
常量指针是指其指向的对象是常量,不能通过该指针修改所指向的值,但可以修改指针本身指向的地址。
-
示例:
const int *ptr;
或int const *ptr;
-
例如:
const int *ptr = &a;
表示ptr
是一个指向int
类型常量的指针,不能通过ptr
修改*ptr
所指向的值,但可以通过其他途径修改a
的值。
-
-
指针常量(pointer to const):
-
指针常量是指该指针本身是常量,即指针一旦初始化后不能再指向其他地址,但可以通过该指针修改其指向对象的值。
-
示例:
int *const ptr;
-
例如:
int *const ptr = &a;
表示ptr
是一个指向int
类型的常量指针,不能改变ptr
的指向,但可以通过*ptr
修改a
的值。
-
-
常量引用(const reference):
-
常量引用是指通过引用绑定的变量不能被修改,但是引用本身不是常量,可以绑定不同的变量。
-
示例:
const int &ref = a;
-
例如:
const int &ref = a;
表示ref
是对a
的一个常量引用,不能通过ref
修改a
的值,但可以将ref
绑定到其他int
类型的常量或非常量。
-
-
引用常量(reference to const):
-
引用常量是指引用本身是常量,一旦初始化后不能再绑定其他变量,但可以通过该引用修改所绑定变量的值。
-
示例:
int &const ref;
(C++ 中不支持这种写法,引用本身不能是常量) -
例如:
int &const ref = a;
这种写法在 C++ 中是不允许的,因为引用本身不能是常量,只能是常量引用。
-
总结:
-
常量指针和指针常量的主要区别在于一个是指针指向的值是常量,另一个是指针本身是常量。
-
常量引用和引用常量的区别在于一个是引用所绑定的值是常量,另一个是引用本身是常量(实际上,引用本身不能是常量,只能是常量引用)。