-
指针传递给函数有四种方式:
-
指向非常量数据的非常量指针:int* countPtr;//声明一个指向非常量数据的非常量指针,不需要包含const
-
指向常量数据的非常量指针:const int * countPTR ;
-
指向非常量数据的常量指针:int * const countPTR = &x;//始终指向同一个内存位置,通过该指针可修改这个位置上的数据。且声明为const的指针在声明时必须被初始化。
-
指向常量数据的常量指针:const int * const countPTR = &x;//不能再作任何修改
-
//解释内容来自《C++大学教程》Deitel 第七版 张引译 8.5节使用const修饰指针 (P276)
指向非常量数据的常量指针始终指向通过一个内存位置,通过该指针可以修改这个位置上的数据,这就是数组名的默认情况,数组名是指针常量(数组名不可改变,数组元素可以改变)。即,常量指针不可变,非常量数据可以通过指针改变
char *const p;//指向非常量字符的常量指针
//指针常量(指针是一个常量)
指向常量数据的非常量指针可以被修改以指向任何适当类型的其他数据项,但是不能通过该指针来修改它所指向的数据。即,指针可变,常量数据不可变
char const *p; //指向常量数据的非常量指针;
const char *p;//指向常量数据的非常量指针;
//常量指针(数据是一个常量)
所以这道题的C,p是一个指向常量的指针,是常量指针,指针可以改变,指针指向的值不可以修改。
但是,当指针是常量指针时,必须要对其初始化。所以,这道题的A选项,在编译器中编译时,会报错。