首页 > 试题广场 >

char * const p, char const * p

[单选题]
char * const p, char const * p, const char *p 上述三个的区别,说法错误的是?
  • char * const p; p的值不可以修改
  • char const * p;p指向的值为只读
  • const char *p;p的值不可以改变
题目是错的
发表于 2016-07-11 12:54:37 回复(0)

话不多说,且看如下笔记!


编辑于 2016-01-29 13:34:53 回复(12)
按照题意,应该选C   但是有点点小问题

A.  p是常量指针,这个指针指向固定的位置,即p的值(地址)不可以修改
B. 是指向常量的指针,    指向的常量值 不能被 *p 修改...  
比如 int a = 4; 
int const *p = &a;   
a = 3;  //这个操作是允许的,因为*p 是指向常量,不能*p = 3 ,但是可以a = 3;
所以B应该就是说*p 指向的值是常量   所以B应该正确
C. const char* p  和 char const *p 一样的
发表于 2015-04-12 18:46:24 回复(5)

A选项里面应该叫指针常量,指针p是一个常量,p不能被修改。

C选项是常量指针,是指针p所指向的变量为常量,但是p是可以修改的

发表于 2015-08-06 17:32:10 回复(4)
指针常量、常量指针,尼玛绕口令吗,我就不知道这什么“指针常量、常量指针”,但是我知道const int *p、int * const p他们哪些能变哪些不能变,再复杂点也能知道什么意思,纠结毛线的名字,***题
发表于 2016-08-03 20:35:16 回复(2)
常量指针和指针常量确实易混,说一下我怎么分的。
联想指针数组和数组指针,知道用来形容一个变量的性质时,名称最后面的名词起决定性作用。
const char *ptr或char const *ptr
首先是个指针,其次指向一个常量,因此是指向常量(字符)的指针。(P.S.有人喜欢叫常量指针,我觉得最好别这么叫)
char *const ptr
它确实是个指针,但它更是个常量,因此是个(指向字符的)指针常量。为什么不叫常量指针?一方面,字符串常量、整型常量、字符常量的叫法就说明了,常量作为限定时放后面。另一方面,有人喜欢把指向常量的指针叫常量指针,为了区分。
因此,这题A不对,应该是指针常量
C不对,p是可变的,可以把p指向其他的const char。又是一个没答案的题,不得不吐槽一下提供题的童鞋。。。
发表于 2015-11-14 01:31:02 回复(0)
const是向右边结合的,根据这个思路确认const修饰的对象表达什么内容。
以本题为例
char * const p,     const向右结合p,表达p是常量,既然p是常量,那么指针p保存的地址就不可以变,地址的代表的内容?不做要求
char const * p,     const向右结合*,表达指针是常量,既然指针是常量,那么只要指针指向的是声明中的char类型就行,指向谁?不做要求
const char *p       const向右结合char*,和上一条一样。
发表于 2019-06-22 18:08:53 回复(0)
char *const p; p为指向字符变量的指针,地址不变,地址内容可变
const char *p; p为指向字符变量的指针,地址可变,地址内容不变
char const *p 与const char *p等价。

附加:
const char *const p (指针不能变,指的量也不能变)

编辑于 2020-05-06 11:11:28 回复(0)
char * const p; //常量指针,p的值不可以修改
char const * p;//指向常量的指针,指向的常量值不可以改 
const char *p; //和char const *p
发表于 2014-11-14 23:35:08 回复(0)
//注释内容来自《C++大学教程》Deitel 第七版 张引译 8.5节使用const修饰指针 (P276)
//指向非常量数据的常量指针始终指向通过一个内存位置,通过该指针可以修改这个位置上的数据
//这就是数组名的默认情况,数组名是常量指针
//即,常量指针不可变,非常量数据可以通过指针改变
char *const p;//指向非常量字符的常量指针
//指针常量(指针是一个常量)

//指向常量数据的非常量指针可以被修改以指向任何适当类型的其他数据项,
//但是不能通过该指针来修改它所指向的数据
//即,指针可变,常量数据不可变
char const *p; //指向常量数据的非常量指针;
const char *p;//指向常量数据的非常量指针;
//常量指针(数据是一个常量)
所以这道题的C,p是一个指向常量的指针,是常量指针,指针可以改变,指针指向的值不可以修改。
但是,当指针是常量指针时,必须要对其初始化。所以,这道题的A选项,在编译器中编译时,会报错。
编辑于 2020-04-25 09:58:54 回复(0)
这里注意他问的是p的值,而不是p指向地址的值
发表于 2023-04-28 08:40:11 回复(2)
只要记住:
const默认左结合,否则右结合。
和*结合,指向不变;
和int、char等结合,指向的东西不变
发表于 2022-03-26 10:29:48 回复(0)
常量指针:const char* p == char const *p   ,  指针p可以指向其他地方,但是指向的值不能被修改
指针常量:char* const p  , 指针p的值可以被修改,但是p不能指向其他地方
常量指针常量:const char* const p , 指针p不能指向其他地方,p指向的值也不能被修改
发表于 2019-05-15 10:33:22 回复(0)
题有问题。
发表于 2015-10-31 15:45:06 回复(0)
我觉得 b 是正确的
发表于 2015-12-27 17:00:40 回复(0)
答案应该是AC吧。

A.应该是指针常量,P的值不能修改
C.是常量指针,指针指向常量
发表于 2015-08-18 20:40:39 回复(0)
A char* const p, p不能修改,是因为const是加在*后面,是指的是p,所以A是对的
发表于 2023-10-13 22:59:26 回复(2)
char *const p;  //这里是指针常量,p是不可以修改的
const char *p; //这里是常量指针,指针可以指向别的变量,p可以修改
C是错的
发表于 2022-12-28 13:57:04 回复(0)
答案是错误的,正确答案是BC,错误答案是A,常量指针的指向可以修改,值不能修改,指针常量的指向不能修改,但是值可以修改
发表于 2022-08-03 11:17:52 回复(0)
左值右向
发表于 2022-04-13 20:34:26 回复(0)