数组名是常量指针?

cutenoob 2006-05-19 10:04:09
今天看书时看到说 "数组名是一个常量指针"
可是我在练习时:

int list[10];
int *p;

p=list;

这样却是编译通过的...

我理解在char *c="abc"; 时会自动在前面加上const 可是这里应该不会在int *p 前面加上const吧..

或是我编译器的问题? XP, vc6.0

希望大家别觉得这问题无聊......
...全文
1105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeahspyme 2006-05-20
  • 打赏
  • 举报
回复
同意zhensm012498() 的
list类型是int* const,const只是限制一旦确定list所指向的地址,list就不能移动了
int* p = list;
完全可行的呀,类型一样,p拷贝了list的值,但是p可以移动了就,p++
Rain 2006-05-20
  • 打赏
  • 举报
回复
今天看书时看到说 "数组名是一个常量指针"
可是我在练习时:

int list[10];
int *p;

p=list;

这样却是编译通过的...
---------------------------------------------
p = list
你这是把一个常量指针给一个指针变量当然可以啊!
比如list[10],的首地址是0x00FF7C,list保存的也是这个,这个地址是不能改变的,即list指的地址 不能变。
你这样:
int *p = new int[10];
list = p;
就不行
pottichu 2006-05-20
  • 打赏
  • 举报
回复
左值不需要是常量。
delphihero 2006-05-19
  • 打赏
  • 举报
回复
就像 int a = 2;2常量,a是变量
cutenoob 2006-05-19
  • 打赏
  • 举报
回复
我找了些资料发现数组名在左值右值的时候有分别的...

资料如下

数组名的本质是代表数组对象的变量名,是一个左值,是一个不能被改变的左值。但是由于在程序中不保存数组的大小,所以通过数组名只能访问数组的左值,不能访问数组的右值。由于这个原因,数组名在作为右值使用的时候被赋予另外一个新的意义——指向数组第一个元素的指针,这就是 array-to-pointer 转换规则。

数组名在程序中作为左值使用的情况屈指可数——在大部分情况下数组名都是作为右值使用的,这时它是一个指针,一个指向数组第一个元素的指针,一个指向不能再被改变的指针——因此是一个指针常量。

那么数组名在什么情况下作为左值使用的呢?根据标准的规定,只有当数组名作为sizeof、&运算符的操作数的时候,它是一个左值,类型为数组类型;除此之外的所有情况,数组名都是一个右值,被编译器自动转换为指针类型,这种情况下我们就说数组名是一个指针,并且是一个指针常量。

单纯地说数组名是一个指针是片面的。我们通常说数组名是一个指针是建立在一个前提的基础之上的,那就是:数组名作为右值使用的时候。

对于数组名总结如下:

在作为左值使用的时候,数组名表示数组对象,是数组类型。在作为右值使用的时候,数组名是一个指针,是指针类型,不再是数组类型。数组名到底是数组还是指针取决于其上下文环境。

看过后对数组名又明白了些....
herman~~ 2006-05-19
  • 打赏
  • 举报
回复
我的理解
常量赋值给X,很正常的吧

又不是修改常量的值
zhensm012498 2006-05-19
  • 打赏
  • 举报
回复
p = list;这条语句是完全可以通过编译的。
“数组名是一个常量指针”,你可以这样理解,但是这种说法中的“常量指针”是指“指针本身是常量,而非指针指向的对象是常量”。
即int list[10];中的list相当于int *const list;而非const int *list;
cutenoob 2006-05-19
  • 打赏
  • 举报
回复
常量不是只有 指向const对象的指针 即const int *p 来接收么?
glchen57 2006-05-19
  • 打赏
  • 举报
回复
常量赋给别人,有何不可?

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧