社区
C++ 语言
帖子详情
数组名是常量指针?
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
打赏
收藏
数组名是常量指针?
今天看书时看到说 "数组名是一个常量指针" 可是我在练习时: int list[10]; int *p; p=list; 这样却是编译通过的... 我理解在char *c="abc"; 时会自动在前面加上const 可是这里应该不会在int *p 前面加上const吧.. 或是我编译器的问题? XP, vc6.0 希望大家别觉得这问题无聊......
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
常量赋给别人,有何不可?
C/C++指针经典资料大全
C/C++指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
数组
名不是
常量指针
这篇是一篇C语言劝退流教学文,看不懂的同学应该是劝退教学流的目标对象 (写完了才想起来注一下,本文提到的“
数组
”和“
数组
名”字样,指的是
数组
左值表达式(array lvalue expression)或
数组
声明(array declaration)所声明的变量) 首先,
数组
名不是
常量指针
,从两方面: 类型方面,
数组
的类型是type[size],和
常量指针
类型type* const不同 使用方面,...
数组
名是
一个指针常量吗?
数组
名是
一个指针常量这种观点来源于
数组
名在表达式计算中与指针的结果等效性。例如下面的代码: int a[10], *p = a, *q; q = a + 1; q = p + 1; 在效果上看,a + 1与 p + 1是相同的,这很容易给人一种a就是p的假象,但,这仅仅是假象。鉴于指针常量包含了指针和常量两类概念,我们可以把这个问题分开两部分进行讨论。 一、
数组
名是
指针
数组
名到底是不是指针? ---
数组
名与指针的区别
数组
名是
指针吗?
数组
名的本质是什么,为什么会和指针产生联系?
6. C++
数组
名与指针区别
1. C++
数组
名与指针区别 对比
数组
名 指针 &(取地址)
数组
名取地址得到的是
数组
名所指元素地址(
数组
首地址) 对指针取地址得到的是指针变量自身的地址 常量变量
数组
名师
常量指针
指针是变量指针 sizeof 对
数组
名使用sizeof时,得到的是元素个数乘元素类型的字节数 对指针sizeof得到的是指针类型的字节数 1.1
数组
名是
常量指针
数组
名是
常量指针
,不可以被修改,指针是变量指针,可以修改 #include <iostream> using nam
C++ 语言
65,176
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章