首页 > 试题广场 >

请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以

[单选题]
请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。
  • const int const *x = &y;
  • int * const x = &y;
  • const int *x = &y;
  • int const *x = &y;
  • const int * const x = &y;
我选B(注:如果答案不是B,请忽略下面的分析)
若const限定符在*之前,则const限定的是*ptr而不限定ptr。也就是说,ptr可以改变其所指向的对象,但不能通过该指针修改其所指向对象的值。

若const限定符在*之后,则const限定的是ptr而不限定*ptr。也就是说,ptr不可以改变其所指向的对象,但能通过该指针修改其所指向对象的值。

若在*之前有const限定符且在*之后也有const限定符,则ptr与*ptr都被限定。也就是说,ptr既不可以改变其所指向的对象,也不能通过该指针修改其所指向对象的值。
另外:只要 在*之后有 const限定符,则该指针在声明时必须初始化。
编辑于 2015-11-10 11:24:17 回复(4)
const 的含义是“只读的”,可以采用记录口诀,“左定值, 右定向”(const位于*左 指向的值不变,const位于*右侧,指针指向不可改变)。
发表于 2017-06-18 18:00:06 回复(3)
A,指针所指向的内存不可变,内存中的值也不能通过指针改变,错误;
B,指针所指向的内存不可变,内存中的值可以改变,正确;
C,指针所指向的内存可变,但内存中的值不能通过指针改变,错误;
D,指针所指向的内存可变,但内存中的值不能通过指针改变,错误;
E,指针所指向的内存不可变,内存中的值也不能通过指针改变,错误;
发表于 2015-09-05 16:58:00 回复(8)
首先,int const和const int是一个意思,所以,对于A选项,实质就是const int * x,所指向的内存值不能变。假如在x的前面,*的后面,加上const,那么就是修饰的指针变量,x不能变
发表于 2015-10-19 14:40:23 回复(0)
“左定值, 右定向”(左右是指const位于*的左或者右)
编辑于 2018-04-11 17:00:00 回复(0)
当const在*的左边,则表示指针所指向的空间的内容不能通过改变*x的值来修改,或者说指针所指向空间的值不能被修改。  当const在*的右边,则表示指针的地址不能被修改,或者说指针的指向不能被修改。 大家可以观看http://m.blog.csdn.net/article/details?id=51149076
发表于 2016-05-18 11:44:47 回复(1)
若const限定符在*之前,则const限定的是*ptr而不限定ptr。也就是说,ptr可以改变其所指向的对象,但不能通过该指针修改其所指向对象的值。 若const限定符在*之后,则const限定的是ptr而不限定*ptr。也就是说,ptr不可以改变其所指向的对象,但能通过该指针修改其所指向对象的值
发表于 2021-10-19 14:53:19 回复(0)
const *p 为常量指针(指针所指向的值不能修改),* const p 为指针常量(指针本身存储的内存地址不可被修改)。
发表于 2021-08-11 08:57:18 回复(0)
如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说明符。在其 他情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。
发表于 2015-11-06 19:17:10 回复(0)
左定值,由定向 const关键字,意思是只读的
发表于 2020-10-08 16:49:23 回复(0)
Cjv头像 Cjv
简单来说,就是const在*x之前,就表示内存的值不能变,const在x之前,就表示x这个指针指向的内存地址不能变。
发表于 2023-10-02 11:17:11 回复(0)
const char *str:    意思是str指向的内存的内容不能通过str来修改,用来保护str所指向的内容
char *const str:   意思是str是只读变里,str不能指向其他地方
const char *const str: 意思是str不能指向其他地方,str指向的内存的内容也不能通过str来修改




发表于 2023-07-25 21:44:36 回复(0)

这行代码定义了一个名为x的常量指针(constant pointer),指向整型变量y的地址。

让我们一步步解释这行代码:

  1. int *: 这表示x是一个指针,指向一个整型数据类型。int *是指向整型的指针类型。

  2. const: 这个关键字说明指针x是一个常量指针,即指针的值(地址)不能被修改。也就是说,一旦x被赋值指向某个地址,就不能再指向其他地址。

  3. x: 这是指针的名称,它是一个常量指针。

  4. =: 这是赋值运算符,将右边的值赋给左边的变量或常量。

  5. &y: 这是取地址运算符,表示取变量y的地址。

综上所述,int * const x = &y;的意思是,声明了一个名为x的常量指针,该指针指向整型变量y的地址。一旦指针x被初始化,它将永远指向变量y的地址,不能再指向其他地方。然而,变量y的值可以随时改变,因为x是指向y的指针,而不是指向y的值。

需要注意的是,这里的const关键字修饰的是指针x,而不是指针所指向的整型变量y。如果你希望y的值也不能被修改,应该使用const int * const x = &y;的形式。

发表于 2023-07-22 12:52:43 回复(0)
直接左定值右定向秒了。
发表于 2023-05-14 16:21:45 回复(0)
const在*前,指针指向空间的值不能修改
const在*后,指针的指向不能修改
发表于 2022-09-10 15:50:20 回复(0)
转:
若const限定符在*之前,则const限定的是*ptr而不限定ptr。也就是说,ptr可以改变其所指向的对象,但不能通过该指针修改其所指向对象的值。

若const限定符在*之后,则const限定的是ptr而不限定*ptr。也就是说,ptr不可以改变其所指向的对象,但能通过该指针修改其所指向对象的值。

若在*之前有const限定符且在*之后也有const限定符,则ptr与*ptr都被限定。也就是说,ptr既不可以改变其所指向的对象,也不能通过该指针修改其所指向对象的值。
发表于 2021-03-24 12:20:42 回复(0)
整合一下评论:
const 写在 * 的左边表示不能通过指针修改对象,const 放在 * 的右边才是常指针。
另外:只要 在*之后有 const限定符,则该指针在声明时必须初始化。

发表于 2020-10-13 10:26:44 回复(0)
*x中x用于存放地址,*x表示指向地址中的内容,所以只需在x前加const即可。
发表于 2020-07-21 14:47:48 回复(0)
const 的含义是“只读的”,可以采用记录口诀,“左定值, 右定向”(const位于*左 指向的值不变,const位于*右侧,指针指向不可改变,也就是地址不可改变)。
只要 在*之后有 const限定符,则该指针在声明时必须初始化。
发表于 2020-07-16 11:05:17 回复(0)
1.  const int* a 和 int const* a是一样的 :指向整型常量的指针,指针所指内存区域中的内容不可变,但是指针本身可以指向别的变量;也就是常量指针(常指针,指向常量的指针)
2.  int* const a :限定指针是常量 ,也就是常说的指针常量;指针本身不可变(其所含的变量地址是确定的),此时,变量的值是可以改变的。
在C++中,把1.又称作底层const,2.称作顶层const;需要注意的是:底层const只能向底层const赋值;类型转换中的const_cast用来去掉变量的const属性(底层const属性,对顶层const无效果)
发表于 2020-04-28 16:04:38 回复(0)