首页 > 试题广场 >

有以下语句定义 &n...

[不定项选择题]
有以下语句定义
int x =5;
const int * const p = &x;
const int &q=x; 
int const *next=&x;
const int *j=&x;
则有语法错误的是()
  • * p =1;
  • q++;
  • next++;
  • (*j)++;
一句话搞定 const修饰指针变量
        const在*的左边,则指针指向的变量的值,不可直接通过指针改变(可以通过其他途径改变);
        在*的右边,则指针的指向不可变。
        简记为“左定值,右定向”。
编辑于 2021-03-11 10:16:51 回复(2)

答案:ABD
A. const int * const p = &x;中指针p及p指向的int类型数据都被const修饰,即*pp都为const属性无法修改

  • 编译器报错error: assignment of read-only location ‘*(const int*)p’ *p = 1;
  • * p =1;语法错误

B. const int &q=x;是指向常量的引用,使用时必须初始化,而且初始化后,引用值不可以改变,引用的常量也不能改变

  • 注意 只是修饰引用q,x不受影响
  • 编译器报错error: increment of read-only reference ‘q’ q++;
  • q++;语法错误

C. int const *next=&x;const修饰整型数 int即*next

  • 注意 同样只是修饰*next,x仍然是变量
  • 指针变量next没有被const修饰因此可以被next++改变,语法正确

D. const int *j=&x;const int *int const *const修饰*j

  • 编译器报错error: increment of read-only location ‘* j’ (*j)++;
  • (*j)为const属性无法修改,故语法错误
发表于 2019-08-19 20:46:21 回复(0)
不成熟的解析:
const int * const p = &x;
对于const p,说明p的值不能改变,*const p说明p一个指针,int *const p,说明p是以指向int类型的指针,这时这个int型的指针,指向的变量(*p)是可以修改的,const int* const p,这里限制了指针指向的变量(*p)不能修改,综上所述,p以及*p是不可改变的
const int &q=x;
int &p=x,是起别名,这时用const 修饰这个别名,说明变量是不改变的
int const *next=&x;
这里先看*next,说明next是一个指针,const *next,说明指针指向的变量(*next)是不改变的,但是并限制next不可改变
const int *j=&x;
int* j说明是一个指针变量,但是const指针变量又被const修饰,说明*j是不可改变的,但是j是可以改变的

发表于 2019-11-01 23:09:55 回复(0)
总结:谁在 const 右边,谁不能改变
去掉类型名  
const 右边是 * 变量名, *变量名 不能修改;
const 右边是 变量名 变量名 不能修改;
eg: 
int const val; 和 const int val;   val++是错误的
int const *val; 和 const int * val; (*val)++是错误的    
发表于 2021-11-24 11:06:32 回复(0)
记住一句话,const具有左结合性。const int * p;const左边没有东西,所以就与右边的int结合,类型加上const就不可更改其值。int * const p;const与*结合,所以指针变量不可更改。
发表于 2023-01-06 21:14:53 回复(0)
   const在*的左边,则指针指向的变量的值,不可直接通过指针改变(可以通过其他途径改变);
        在*的右边,则指针的指向不可变。
        简记为“左定值,右定向”。
发表于 2022-07-31 19:43:32 回复(0)
const int *p=&x与int const * p=&x等价;     const修饰的是*p即指针变量p指向的内存单元里的内容,这个内容不可变但指针变量p保存的地址可以变;
int  * const p=&x;      const修饰的是指针变量p即指针变量p保存的地址不可以改变但指针变量p指向的内存单元里的内容可以变;
编辑于 2022-03-06 10:29:00 回复(0)
答案应该是A D
B选项中的q++是不对的,q是常引用,不能通过q修改x的值
发表于 2019-08-15 22:27:09 回复(1)
int x = 5;
const int &q=x;  //&q赋值初始化常量也会报错
这题本身就不成立
发表于 2022-02-03 12:01:23 回复(0)
我特喵看成选正确的,然后就选成了C答案,然后做完看答案发现是选ABD,我还以为我成功的避开正确答案了,仔细看才知道是选错误的............
发表于 2021-09-24 14:56:19 回复(0)
Const 修饰离他最近的元素,如const int*p 修饰的是int*类型,表示指针不能够指向其他的位置,而int const *p表示p的值无法改变
发表于 2022-07-18 15:48:40 回复(0)
p是指向常量的常量指针 p的值以及p指向的地址的值都不能发生改变 q是常量引用 不能用作修改它绑定的对象,也不能改变 next是常量指针 next的值不可以变,但是next指向的地址的值能改变 j是指针常量 j的值能变,但是j指向的地址的值不能改变
发表于 2022-04-02 04:30:04 回复(0)