| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1002 人关注过本帖
标题:int a[10] = {0}; (a + 5) - (a + 2) = ?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指针的运算,就如带单位的物理量运算,2米-1米等于1米,2千米-1千米等于1千米,数值都是1,但意义不同。当你在前面无缘无故引入sizeof(int)去计算地址值的时候,就必须考虑如何消除这个引入因素的影响。

归根结底还是那句老话:“很多时候,不知道细节恰恰有助于保护你。”C语言的设计,那种指针运算就已经确保了某种一致性,正如4楼所说的那样,做简单的去括号数学演算即可,这是语言设计要做到这样的,但偏偏你懂一点又不懂另一点,所以反而出现问题。那句话看起来虽然很矛盾,但实践证明那其实是真理——所有编程语言(包括硬件设计)的发展,都是往这个方向走。过去那种学软件之前先学硬件和汇编的观念,早已是过去式,不学还好,越学越迷茫。

授人以渔,不授人以鱼。
2014-06-21 17:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
根本上,数组的下标就是pointer,它指示数据的寻获线索,对用英文思维的人来说,理解pointer很自然,但中国大陆人偏偏就出错,以为只有储存地址才是指针。在DOS时代过来的人反而不会犯这种错,因为那个时候的指针由基地址和偏移地址组合而成各种指针形式,大家都知道那是寻址器,而不是绝对的地址值可与整数等价的。

其实像数据库中的记录号、索引ID等,凡是有助于追寻数据的东西,都可作为pointer概念的实现体。那种把指针神化到只有C/C++系列独有的优越感、以为只有充斥无数的*号和&号才是正宗C代码的观念,误人子弟,学好指针就等于王牌在手的言论,往往坏在偏狭理解指针的概念上。

[ 本帖最后由 TonyDeng 于 2014-6-21 18:37 编辑 ]

授人以渔,不授人以鱼。
2014-06-21 17:15
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
收藏
得分:0 
受教,感谢版主!
2014-06-25 16:14
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
哇,版主说了好多


莫问前尘有愧,但求今生无悔
2014-06-26 13:41
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
还有分分么?

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2014-06-26 13:58
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
还有分分么?

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2014-06-26 13:58
快速回复:int a[10] = {0}; (a + 5) - (a + 2) = ?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037659 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved