首页 > 试题广场 >

下面3段程序代码的效果一样吗?

[单选题]
下面3段程序代码的效果一样吗?
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;

  • (2)=(3)
  • (1)=(3)
  • (1)=(2)
  • 都不一样
  • 都一样
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为"左定值,右定向"。
发表于 2016-06-23 09:33:58 回复(15)
是否一样只要看const出现在 * 的哪边,如果在左边表示被指物是常量,如果在右边表示指针本身是常量。
发表于 2016-05-13 08:09:55 回复(1)
只需要记住const修饰它左边的对象就可以了:int const *a=&b;修饰int;       int *const a=&b;修饰*;
如果const在最左边它才会修饰右边对象:const int *a=&b;修饰int;
发表于 2018-05-14 15:14:58 回复(0)
const在*的哪边,左定值,右定向。
发表于 2017-03-02 21:42:07 回复(2)
const在*前还是后决定了限制的是指针本身还是指向值不可修改
发表于 2020-09-12 23:17:35 回复(0)
左定值右定向
发表于 2017-03-27 17:42:57 回复(0)
若const在*的左边,则表示值是确定的,若const在*的右边,则表示指针指向的方向是确定的。
发表于 2018-11-22 15:58:51 回复(0)

这三段代码的效果 不完全一样。它们涉及到不同的const关键字位置,表示不同的含义。让我们逐一分析:

1.(1) const int *a = &b;

  • 解释:a是一个指向常量整数的指针。
  • 含义:指针a可以指向不同的整数,但是通过a不能修改指向的整数的值(即*a是常量)。但是,指针a本身的值是可以修改的(即,指针a可以指向不同的地址)。
const int *a = &b;  // *a 是 const,指向的内容不可修改,但 a 本身可以修改
  • 可以修改
    • a可以指向不同的地址。
  • 不能修改
    • *a不能修改,即不能通过a修改b。

2.(2) int const *a = &b;

  • 解释:a也是一个指向常量整数的指针。
  • 含义:与(1)完全相同,只是const和int的顺序不同。int const *a和const int *a语义上是等价的。
    • 这表明a是一个指针,指向一个常量整数,*a不能被修改,但是指针a可以指向其他地址。
int const *a = &b;  // *a 是 const,指向的内容不可修改,但 a 本身可以修改
  • 可以修改
    • a可以指向不同的地址。
  • 不能修改
    • *a不能修改。

3.(3) int *const a = &b;

  • 解释:a是一个常量指针,指向一个整数。
  • 含义:a是一个指针常量(指针本身不可修改),但是指向的内容(*a)是可以修改的。也就是说,a不能指向其他地址,但可以通过a修改其指向地址的值。
int *const a = &b;  // a 是 const,指针不可修改,但 *a 可以修改
  • 可以修改
    • *a(指向的值)可以修改。
  • 不能修改
    • a(指针本身)不能修改,不能让a指向其他地址。

总结:

  • (1)和(2)具有相同的效果:a是一个可以修改的指针,但它指向的内容(*a)是常量,不能修改。
  • (3)与(1)和(2)不同:a是一个常量指针,不能指向其他地址,但可以修改它指向的内容。

结论:

  • 效果不一样,因为(1)和(2)是指向常量的指针,而(3)是常量指针
发表于 2024-12-16 19:14:05 回复(0)
不是应该选1和2一样吗
发表于 2025-03-05 17:02:25 回复(0)
顶层const,const在' * '星号之前,表示指针所指对象是常量,不可以通过指针解引用修改。
底层const,const在' * '星号之后,表示指针本身的值不可变,可以通过指针解引用修改被指对象的值。
发表于 2024-08-01 13:07:52 回复(0)
左定值,右定向
发表于 2022-07-08 12:59:54 回复(0)
Const相对*左定值,右定向
发表于 2022-03-13 17:16:49 回复(0)
const用于修饰左边的字符 如果const位于*的左边 则修饰int 即值 位于*右边 则修饰*即 指针指向
发表于 2022-03-03 18:21:41 回复(0)
左数右指
发表于 2021-12-29 06:29:49 回复(0)
(1)和(2) 中const修饰的是 *a,即就是a指向的地址处的值,这个值不变;
而(3)中const修饰的是a,即就是a指向的地址,这个地址不变
发表于 2021-05-10 20:43:00 回复(0)
<p>左定值 右定向</p>
发表于 2020-09-24 18:27:27 回复(0)
"左定值,右定向"。
发表于 2020-08-07 07:49:02 回复(0)
从右往左, p=p is a, *=pointer to
发表于 2020-02-27 19:23:17 回复(0)
const对变量类型透明
发表于 2019-10-10 16:44:04 回复(0)
把行号看成了选项
发表于 2019-07-17 15:53:49 回复(1)