免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Ager
打印 上一主题 下一主题

[C] 浅谈一下C语言中的指针与数组的关系 [复制链接]

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
101 [报告]
发表于 2012-12-26 21:13 |只看该作者
int a[5];
&a+1
这个a的数据类型是int[5]
&a是 int(*)[5]
&a+1就是 +sizeof(int[5])
为什么解释不了
不止能解释 还能解释得很清楚

写出(&a)+1 就能看出你还没掌握好 优先级?

论坛徽章:
0
102 [报告]
发表于 2012-12-26 21:14 |只看该作者
timothyqiu 发表于 2012-12-26 21:12
回复 97# sqfasd

你的意思是「是指针对象」,他的意思是「类型是指针」。

明白了。是我自己见识浅。不知道还有指针类型和指针对象区分。
那pm前辈那句数组名是一个指针类型。我能接受

论坛徽章:
0
103 [报告]
发表于 2012-12-26 21:19 |只看该作者
回复 101# lin5161678


    呵呵,我那样写也没歧义吧。只是想强调而已,虽然没必要

论坛徽章:
0
104 [报告]
发表于 2012-12-26 21:25 |只看该作者
回复 101# lin5161678

您还没解释,a == &a呢
参照91楼和98楼的观点,能解释吗
   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
105 [报告]
发表于 2012-12-26 21:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
106 [报告]
发表于 2012-12-26 21:33 |只看该作者
本帖最后由 Ager 于 2012-12-26 21:34 编辑
sqfasd 发表于 2012-12-26 21:04
回复 98# Ager

还是太表面了,没有触及到本质,这些语法层面的东西,编译器想怎么解释想怎么处理都可以,问题是到了执行环境下,是什么一种状况?
int *p;
这就会分配内存了
&p
这只能作为rvalue,编译器直接计算,不会因为一个“取址”操作而为它分配空间,这是本质的区别吧


呵呵。。觉得你所讲的,有些含混。

撇开它们,我再澄明两点:

(1)许多人所谈到的“取址”操作,往往得到的是指针。

(2)指针不是地址!指针与生俱来地携带着数据类型信息(这个信息对于指针加减法来说,至关重要),地址则完全没有。

另外
int a[5];
assert(a == &a);
怎么解释
(&a) + 1
又怎么解释


在这样的例子中,“取址”表达式(姑且还这麽叫)
  1. &a
复制代码
帮助程序得到一个指向数组a的指针,而非指向其元素a[0]的指针。

一个指向数组a的指针 —— 即 int(*)[5] 类型(而不是int*类型),这意味着,该指针天然地携带着由声明
  1. int a[5];
复制代码
所呈明的 数组元素数据类型信息(int) 和 数组规模信息(5)。

继而,表达式
  1. (&a) + 1
复制代码
如果从地址偏移来说,是得到了一个“于数组a的基地址之上偏移5个int单位尺寸”的地址。

按你们那种表面理解,根本解释不了


不是“表面理解”啦,这就是语言特性或语言规范的简单事实而已。

呵呵,仅供参考 —— :)




论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
107 [报告]
发表于 2012-12-26 21:35 |只看该作者
回复 104# sqfasd


也没什么好解释的
数据类型不一样
值一样
==运算符 比较值

应该会有警告的

论坛徽章:
0
108 [报告]
发表于 2012-12-26 21:37 来自手机 |只看该作者
完全明白问题所在了
多谢耐心指点

论坛徽章:
0
109 [报告]
发表于 2012-12-26 21:39 来自手机 |只看该作者
一直以实用为主,看来还得系统复习一遍,不然好多概念没法交流

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
110 [报告]
发表于 2012-12-26 21:43 |只看该作者
sqfasd 发表于 2012-12-26 21:25
回复 101# lin5161678

您还没解释,a == &a呢
参照91楼和98楼的观点,能解释吗
  1. a == &a
复制代码
The Warning says it all.....

编译器会先抱怨你一下,然后,它还是默默流泪地满足你的欲望。。。。。。

呵呵。。。。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP