首页 > 试题广场 >

定义:int *const ptr;下面哪种说法是正确的()

[单选题]
定义:int *const ptr;下面哪种说法是正确的()
  • ptr不可修改,*ptr可修改
  • ptr不可修改,*ptr不可修改
  • ptr可修改,*ptr不可修改
  • ptr可修改,*ptr可修改
考察const的作用,不需要死记硬背,没那么复杂。
const 的作用就是封锁它后面的东西,即后面的不可改变。
对于   i nt *const ptr;  没有const关键字时,为int* ptr 此时ptr是指向int的指针。加上const后,const修饰并封锁ptr   。即ptr的指向不可改变。

同理 int const* ptr(等同 const int *ptr)  。const修饰 *  解引用  ,即 指针指向的内容不可改变。
发表于 2015-09-20 09:06:03 回复(3)
教给大家一个口诀
* (指针)和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。
常量指针:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
指针常量:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
发表于 2015-09-23 10:29:16 回复(0)
你只需要用英文读出来就行
int *const p  读作 p is a const pointer to int
const int *p  读作 p is a pointer to const int
const int * const p  读作 p is a const pointer to const int
显然,pointer是否带const说明pointer(所谓指向)能不能变,to后面是否带const说明pointer指向的值能不能通过该指针改变。
英文一目了然的东西,哪来那么多的解释?建议阅读C++Primer英文版,让什么常量指针、什么指针常量见鬼去吧
编辑于 2022-05-26 16:23:15 回复(2)



一个诀窍是,只看const右边,以const int * const p;为例,左起第一个const往右看到头遇到* 和 p,因此*p不可改,第二个const往右看到头,遇到p,因此,p不可改

所以就算是
const const int const  const* p1;也没有关系,依然是*p不可改,p可改(亲测,vs2010)

编辑于 2015-09-20 21:58:29 回复(0)
const在*左边即限制指针所指的值,在*右边即限制指针的指向,“左定值右定向”。
发表于 2019-05-29 09:19:16 回复(0)
主要看const修饰那部分,,,别背就行
选A
发表于 2015-09-20 09:36:30 回复(0)
❓ 到底该如何区分 "指针常量" 和 "常量指针" ? 
我们用英文倒过来读 (星号读成pointer),看 point 和 const 谁先出现。
point 先出现,就是 指针常量,const 先出现,就是常量指针。
例如:
1. const int* p    ->   p is a pointer to int const   (p是一个指向整型常量的指针)->  指针常量
2. int const* p    ->  p is a pointer to const int    (p是一个指向常量整型的指针)->  指针常量(写法和1不同而已)
3. int* const p   ->  p is a const pointer to int      (p是一个指向整型的常量指针)->  常量指针

更简单的方式:直接无脑倒着读!看星号和const谁先出现,就先读谁!
星号先出现就是指针常量,const先出现就是常量指针。
1. const int* p ,倒着读!星号先出现,所以  指针常量
2. int* const p ,倒着读!还是星号先出现,所以 指针常量
3. int* const p,倒着读!const 先出现,所以是  常量指针
-------------------------------------------------------------------------
📚 现在我们来理解他们的效果,有两种方法:
直接根据口诀去看:《左定值,右定向》   
(十分推荐,简单粗暴,甚至可以不用分清指针常量和常量指针的概念,可以直接出答案)
我们只需要看 const 在 星号 左边还是右边即可!
const 在星号左边,定的是值(值不可修改); const 在星号右边,定的是向(指针指向不可修改)
比如:
1.  const int* p    ->   const 在 * 左边,根据 《左定值》,定的是值,值不可被修改,但指针指向可以修改。
2.  int const* p   -> const 还是在 * 左边(只是写法不同),定的是值,值不可被修改,但指针指向可以修改。
3.  int* cosnt p   -> const 在 * 右边,根据《右定向》,定的是向,指针的指向不能修改,但是值可以修改。

直接根据名字,见名知意:
既然我们已经知道如何区分 指针常量 和 常量指针 了,我们直接看名字就能解决。
先举个例子,好学生,"好" 字是不是修饰的是 "学生" ?那好:

常量指针:"常量" 是不是修饰的是 指针?  那自然指针的指向不能被修改,因为被 常量修饰了。
指针常量:"指针" 修饰的是常量,那就是后面的值不能被修改,"常量" 并没有修饰指针,所以指针的指向是可以修改的。 


--------------------------------------------------------------------------------
🚩 现在,我们再来看这道题:
定义:int *const ptr;下面哪种说法是正确的()
  • ptr不可修改,*ptr可修改
  • ptr不可修改,*ptr不可修改
  • ptr可修改,*ptr不可修改
  • ptr可修改,*ptr可修改
int* const ptr,用英文倒过来读:ptr is a const pointer to int,先出现的是 const,所以是 常量指针
根据口诀,《左定值,右定向》,看 const 在星号左边还是在星号右边:
int* const ptr  ->  const 在 * 右边,所以定的是向,即 指针的指向不能改变,值可以改变。

也可以直接根据 常量指针,直接想到指针的指向不能改变,因为 "常量" 修饰的是指针,好学生,"好" 字修饰的是 学生,常量修饰了指针,那自然指针的指向不能修改。


这里 ptr 指的是指针, *ptr 解引用得到的是值,所以:
ptr (指针)不可修改,*ptr (值)可修改
本题选 A

(ps:顺手总结的,比较仓促,有错误在所难免,如有错误请指出,感激不尽!!!)
编辑于 2023-05-10 15:23:30 回复(1)
左数右址,const在*号左边是数不变,在*号右边是地址不变。
发表于 2017-05-29 13:28:43 回复(0)
以*为界,*左边是ptr指向的内容,是int,所以,ptr指向的内容可以改变,即*ptr可以改变
*右边是指针的类型,指针式const型,所以指针不可以改变,即ptr不可以修改
答案A
发表于 2016-08-21 18:39:35 回复(0)
为什么评论区给我看懵了。*ptr不是叫指针指向的值吗,ptr是指针本身的值。我记错了吗

发表于 2022-02-07 16:03:38 回复(0)
1个 const 在 * 前面 表示指针变量指向的值不可以修改,指针变量的指向可以改变
在 *和ptr中间, 表示指针变量的指向可以改变,不可以通过指针修改指针变量指向的值。
发表于 2023-10-25 20:49:38 回复(1)
const和谁近就修饰谁。本题中int *const ptr,即表示ptr的指向不能改变,但是 *ptr可以变。
 eg: 
    int m=2,n=3; 
     int *const ptr=&m; 
     ptr=&n;//错误,ptr本身指向不能变 
     *ptr=n;//正确,
ptr指向m地址,*ptr指针指向的值
发表于 2023-08-23 17:17:46 回复(0)
记住左定值右定向 const在*左边还是右边? 左边为指针常亮,其所指的内容不变;右边为常量指针,其本身值(地址)不变,选A
发表于 2023-07-29 07:38:29 回复(0)
const右边不可改
发表于 2023-04-12 22:24:06 回复(0)
const int *p表示*p不可改变,p可变
int *const p表示p不可变,*p可变
发表于 2023-03-14 22:47:32 回复(0)
const后面跟着的不可修改 对着找答案就行
发表于 2022-07-20 01:59:29 回复(0)
指针常量 int* const p,指针是个常量,即地址不可修改,指针指向的值可以修改
常量指针,const int* p,指针指向一个常量的地址,即它指向的值是常量,不能修改,但地址可以修改
发表于 2022-07-15 15:39:56 回复(0)
左定值,右定向
发表于 2022-07-04 07:29:22 回复(0)
const靠近谁,谁就不能修改
发表于 2022-05-25 10:04:58 回复(0)
int *const ptr是指地址不可修改,但是地址所指向的内容可以修改? 有错误请指正
发表于 2022-03-23 17:28:46 回复(0)