社区
C语言
帖子详情
指针疑问
yujian596
2010-04-21 05:18:08
摘抄的,他讲的第二重意义是否正确?why?
声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个
常量指针
,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,
注意它和数组第0号单元占据的内存区是不同的。该指针的值是不能修改的,即类似array++的表达式是错误的
。
...全文
214
17
打赏
收藏
指针疑问
摘抄的,他讲的第二重意义是否正确?why? 声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。该指针的值是不能修改的,即类似array++的表达式是错误的。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GentooEmacs
2010-04-22
打赏
举报
回复
http://download.csdn.net/source/2270813
希望对你有帮助,写得很详细,全是介绍指针的
GentooEmacs
2010-04-22
打赏
举报
回复
上面的应该是正确的,数组名就是一个常量,它代表一个地址常量,指向数组的起始地址
注意,这个数组名被存储在存储器的某个位置,是一个指针常量,当你取a[1]的值时,编译器是这样做的,
先找到a[0]的地址,这个地址与a是相通的,然后*(a+1);就是这样;
在这再给你补充点知识;希望对你有点帮助,呵呵
行指针与列指针
比如:数组a[3][3]
行指针 a &a[0];
列指针 a[0] *(a+0);
Int b[4];//b是列地址
int (*p)[3]; //定义一个行指针,此行指针指向一个有三个元素的int类型数组
关于行指针和列指针的两句话:行指针取*变成列指针,列指针再取*变成数组元素;
数组元素取地址变成列指针,列指针取地址变成行指
赵4老师
2010-04-22
打赏
举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
yujian596
2010-04-22
打赏
举报
回复
谢5楼和9楼。顶上,希望有更多的高手讲解下。
看了5楼的文章,有一定帮助。但是,我觉得你的论证方式有问题,你要论证数组名不是指针常量,你却从数组名不是指针,也不是常量来论证。指针常量,应该是指针的常量,主体是常量,指针只是修饰的。还有“c和d是自动数组,首地址在编译期是不可知的,因为这样的对象在编译期还不存在”,我有疑问,编译期经过此函数时实际分配了内存的,只是函数结束后释放了。
wade_2003
2010-04-22
打赏
举报
回复
不可以array++ 吧
www_adintr_com
2010-04-22
打赏
举报
回复
++的含义除了返回 array + 1 外还要修改 array 本身,而常量不能修改,所以不能 ++
飞天御剑流
2010-04-22
打赏
举报
回复
[Quote=引用 10 楼 yujian596 的回复:]
谢5楼和9楼。顶上,希望有更多的高手讲解下。
看了5楼的文章,有一定帮助。但是,我觉得你的论证方式有问题,你要论证数组名不是指针常量,你却从数组名不是指针,也不是常量来论证。指针常量,应该是指针的常量,主体是常量,指针只是修饰的。还有“c和d是自动数组,首地址在编译期是不可知的,因为这样的对象在编译期还不存在”,我有疑问,编译期经过此函数时实际分配了内存的,只是函数结束后释放了。
[/Quote]
你现在一时理解不了是很正常的,原因嘛,一是时间问题;二是受其它书籍的毒害。慢慢来吧,两三年后希望你再回来好好读一下这一章,那时候再重新思考以上这段话。
yujian596
2010-04-22
打赏
举报
回复
[Quote=引用 13 楼 zhuyingqingfen 的回复:]
http://download.csdn.net/source/2270813
希望对你有帮助,写得很详细,全是介绍指针的
[/Quote]
你上传的就是我现在看的。。。我也认为他是个指针常量。。非原文说的常量指针。他指向的数组的首地址是不可改变的,即指针的值是不能修改的,但是对于原文说的类似array++的表达式是错误的,我认为array++的表达式不是错误的,因为只从这个表达式看来,array数组名完全可以当做数组的首地址使用,array++指向数组的下一个元素地址。
ypb362148418
2010-04-21
打赏
举报
回复
那个指针不是常量指针,指针明显可以修改他指向的值,但是的确是有独立的内存空间,数组名不是指针,不过可以转化
飞天御剑流
2010-04-21
打赏
举报
回复
[Quote=引用 6 楼 cudyiron 的回复:]
引用 5 楼 supermegaboy 的回复:
引用楼主 yujian596 的回复:
摘抄的,他讲的第二重意义是否正确?why?
声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数……
[/Quote]
http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855018.aspx
sfd1234
2010-04-21
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 yujian596 的回复:
摘抄的,他讲的第二重意义是否正确?why?
声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第……
[/Quote]
绝对的概念错误!
相似不代表相同!
很多老师可能为了怕大家乱,于是就说是相同了!这样不好!
ShaoTch
2010-04-21
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 yujian596 的回复:
摘抄的,他讲的第二重意义是否正确?why?
声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组……
[/Quote]
那请问这两个概念应该要怎么表述呢?
我只知道数组名和指向数组指针是不一样的,数组名指向数组第一单元,其值只读,且数组名是存在于进行内存的数据段内,楼主讲义里描述的和我说的是一回事吗?
飞天御剑流
2010-04-21
打赏
举报
回复
[Quote=引用楼主 yujian596 的回复:]
摘抄的,他讲的第二重意义是否正确?why?
声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。该指针的值是……
[/Quote]
错在这两句:
它是一个常量指针
该指针自己占有单独的内存区
彻底的概念性错误。
r11222
2010-04-21
打赏
举报
回复
有什么问题呢?事实就是这样
zwicker
2010-04-21
打赏
举报
回复
array++貌似是可以的啊 指向数组的下个元素的内存区
某某9
2010-04-21
打赏
举报
回复
我感觉正确~
yujian596
2010-04-21
打赏
举报
回复
自己顶个
c
指针
疑问
刚刚看到一篇文章写的是有关cuda
指针
的博客,我不是很明白,就复制过来写写我的
疑问
。 原文博客是http://bbs.csdn.net/topics/390957076 typedef int (*FP)(int); int Fun(int n) { return n*2; } void ...
解决lower_bound函数引申出的
指针
疑问
(超详细)
疑问
三连 ,就发现这个事情没有想象中这么简单 那么接下来的内容…
指针
警告!!!
指针
警告!!!
指针
警告!!! 先解答第一个问题!(三个参数是啥!) 三个参数! 第一个参数 :是你要搜索的东西的 头...
解决关于
指针
的
疑问
解决关于
指针
的
疑问
指针
的
疑问
指针
的
疑问
数组
指针
和二级
指针
的区别
这个有的人就会犯
疑问
,如果数组
指针
和其他类型的
指针
一样,解引用应该会拿到数组首元素的值才对。为什么解引用两次才会拿到首元素的值,那这样不就和二级
指针
是一样的吗。 但其实我认为数组
指针
和二级
指针
只是用法...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章