首页 > 试题广场 >

以下关于指针的说法,正确的是()

[单选题]
以下关于指针的说法,正确的是()
  • int *const p与int const *p等价
  • const int *p与int *const p等价
  • const int *p与int const *p等价
  • int *p[10]与int (*p)[10]等价
推荐
答案选C
  • int *const p与int const *p等价    前者是指向整数数据的常量指针,指针不可再被修改,后者是指向数据类型为常量的指针p,p所指向的数据值不可更改
  • const int *p与int *const p等价    const int 同int const
  • const int *p与int const *p等价    
  • int *p[10]与int (*p)[10]等价    前者是一个数组,数组里存放十个这样的指向整形数据的指针,后者是一个数组指针,p指向存放整形数据的数组
编辑于 2015-12-06 17:01:13 回复(4)
这种一般是根据靠近原则来看,const修饰p那么就是指针本身值不变,const修饰*p那么就是指指针指向的变量值不变
发表于 2016-06-03 20:07:22 回复(4)
在头像

那如何区分这几类呢? 带两个const的肯定是指向常量的常指针,很容易理解,主要是如何区分常量指针和指针常量:

一种方式是看 * 和 const 的排列顺序,比如
     int const* p; //const * 即常量指针
     const int* p; //const * 即常量指针
     int* const p; //* const 即指针常量
还一种方式是看const离谁近,即从右往左看,比如
     int const* p; //const修饰的是*p,即*p的内容不可通过p改变,但p不是const,p可以修改,*p不可修改;
     const int* p; //同上
     int* const p; //const修饰的是p,p是指针,p指向的地址不能修改,p不能修改,但*p可以修改;

发表于 2017-04-04 12:15:20 回复(2)
选c吧,看const在*左边还是右边,c都是指向常量整型
发表于 2015-11-26 00:13:58 回复(0)
int * const p p是一个const指针 指向int型变量 int const * p p是一个指针 指向int型常(const)量 const int *p p是一个指针 指向int型常(const)量 int *p[10] p是一个数组 含10个int*元素 int (*p)[10] p是一个指针 指向一个有10个int的数组
发表于 2016-06-18 09:05:31 回复(0)
const默认修饰左边的内容,如果左边没有东西则修饰其右边的内容
const int *p   const左边没有东西,因此const修饰int,则指针指向的内容不可通过指针修改
int const *p   const左边有东西,因此const修饰int
发表于 2022-06-12 07:56:41 回复(0)
说实话,这么题目没有任何意义。不知道为什么老考这种题目。实际项目中谁会这么写。像八股文一样无聊
发表于 2017-04-07 10:09:56 回复(1)
a选项,前者表示指针所指的地址不可变,后者表示指针所指地址处的值不可改变,因此不等价;
b选项,前者表示指针所指地址处的值不可改变,后者 表示指针所指地址不可改变,因此不等价;
c选项,前者表示指针所指地址处的值不可改变,后者也是,因此等价;
d选项,前者表示指针数组,本质是数组,后者表示数组指针,本质是指针,因此不等价。
发表于 2021-05-06 14:23:17 回复(0)
最简单的方法,直接看const在*的那一侧,同一侧就是等价,不同侧就不等价。
发表于 2019-05-06 23:01:02 回复(0)
考的顶层const 和底层const
发表于 2018-05-16 16:05:48 回复(0)
直接忽略掉类型判断就可以了。
发表于 2017-09-14 10:57:30 回复(0)
int *const p 与 int const*p 等价:这是不正确的。 int *const p 表示 p 是一个指向整数的常量指针,也就是说 p 所指向的地址不能改变,但通过这个地址所指向的整数值是可以改变的。 int const*p 表示 p 是一个指向常量整数的指针,也就是说 p 所指向的整数值不能通过 p 来改变,但 p 可以指向其他地址。 const int *p 与 int*const p 等价:这是不正确的,如上所述,它们的意思完全不同。 const int *p 与 int const *p 等价:这是正确的。 两者都表示 p 是一个指向常量整数的指针。只是 const 修饰的位置不同,但意义相同。 int*p[10] 与 int(*p)[10] 等价:这是不正确的。 int*p[10] 表示 p 是一个数组,数组中有10个元素,每个元素都是一个指向整数的指针。 int(*p)[10] 表示 p 是一个指针,指向一个包含10个整数的数组。 因此,正确的说法是: const int *p 与 int const *p 等价。
发表于 2024-05-08 10:18:20 回复(1)
左定值右定向
发表于 2023-09-06 11:04:52 回复(0)
从右往左看,const修饰谁谁就不可以更改
发表于 2022-08-30 10:50:53 回复(0)
左定值,右定向。 在 * 左边定值,在 * 右边定指向
发表于 2021-10-27 10:24:38 回复(0)
const只修饰其后的变量:
1. 用const修饰常量,表示常量不可改变;
2. 用const修饰指针分为两种情况:

const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);

const在*的右边,则指针的指向不可变。简记为“左定值,右定向”。

发表于 2022-10-11 17:25:59 回复(0)
指针和const谁在前先读谁,*代表地址,const代表内容,谁在前谁不能变。
int *const p指针常量,int const *p常量指针,const int *p常量指针,还有一种const int * const p即内容和地址都不可变
D、int *p[10]是指针数组,数组里存放的都是整型类型的指针,int(*p)[]是一个指针,指向一个数组。
发表于 2022-04-29 16:39:48 回复(0)

const int* pint const* p是等价的,都表示常量指针,即常量指针,也即指针指向的值是常量不可被修改,但是指针本身的值可以被修改

int* const p表示指针常量,即指针常量,也即指针本身是常量其值不可被修改,但是指针指向的值可以被修改

发表于 2022-02-25 10:42:51 回复(0)
看星号和变量是否在一起
发表于 2021-06-07 12:18:58 回复(0)
  • int *const p与int const *p等价    前者是指向整数数据的常量指针,指针不可再被修改,后者是指向数据类型为常量的指针p,p所指向的数据值不可更改
  • const int *p与int *const p等价    const int 同int const
  • const int *p与int const *p等价    
  • int *p[10]与int (*p)[10]等价    前者是一个数组,数组里存放十个这样的指向整形数据的指针,后者是一个数组指针,p指向存放整形数据的数组
发表于 2021-03-21 20:51:32 回复(0)
1、int const *p; 等价于 const int *p;:指针的指向可以改变,而不能通过指针来改变指针指向的内容;
2、int *const p:指针的指向不可以改变,可以通过指针来改变指针指向的内容;
发表于 2019-04-21 15:19:45 回复(0)