学过C语言的进,你绝对不知道的C语言数组语法!
单机游戏吧
全部回复
仅看楼主
level 11
God_of_喷 楼主
C语言中带有三个元素的数组p,p的第二个元素写作p[1]对吧。其实写成1[p]也是
正确的

我知道你不相信,我使用GCC编译通过了。为了说明,我用CodePad写了一个示例程序。
下方的output就是输出,可以看到p[1]与1【p】输出完全相同。
至于为什么呢?狗喷已经想懂了。诸位可以先自己想,我吃完饭公布答案。
提示:C语言事实上是一种汇编语言的脚本抽象。C语言的数组不是数组(这句话有很多人想黑我,但是请自己思考,并不是完全错误的)。
2012年12月21日 15点12分 1
level 12
跪了[害羞][憧憬]
2012年12月21日 15点12分 2
现在才吃饭?![汗]高三真恐怖
2012年12月21日 15点12分
回复 无~少年 :吃夜宵····我11点钟下课回家
2012年12月21日 15点12分
回复@God_of_喷 :恐怖[啊]本熊高一22点放学
2012年12月21日 15点12分
level 9
求答案~~~~[Love]
2012年12月21日 15点12分 3
level 11
是这意思么
2012年12月21日 15点12分 4
[汗]正经学术讨论请勿插科打诨
2012年12月21日 15点12分
level 12
现在才吃饭我爪机没图……唉
2012年12月21日 15点12分 5
main () { int p[3]; p[0]=1; p[1]=2; p[2]=3; printf("%d\n",p[1]); printf("%d",1[p]); }
2012年12月21日 15点12分
@God_of_喷 没弄懂,我初一时学过一点帕斯卡语言【另一种计算机语言,和语言有点像】,结果参加比赛什么奖都没得,后来也放弃了,不过我一朋友现在还在钻研这个,现在太晚,以后有时间我去问他
2012年12月21日 15点12分
回复 水B不在再水 :[汗]帕斯卡知道,但是没有学过语法。你参加的是全国计算机奥林匹克竞赛吧,那个才会考这种古老但奇葩的语言
2012年12月21日 15点12分
@God_of_喷 对,而且只学了十天就去参加比赛,能得奖就才怪
2012年12月21日 15点12分
level 14
在这吧说这个没几个人看得懂。
2012年12月21日 15点12分 6
单机吧也有不少学C语言的,不要被单机吧智商为零的谎言骗了。
2012年12月21日 15点12分
level 8
java程序猿路过[Love]
2012年12月21日 15点12分 7
[汗]java没有测试,但我估计只有C语言可以,狗喷是C++党,偶然之间看汇编看到的,顿时惊讶了。
2012年12月21日 15点12分
回复 God_of_喷 :出来工作发现C++和C#才是王道,尼玛我的java小组完全被闲置了
2012年12月21日 15点12分
回复 figocheung1227 :[汗]最近被汇编各种虐,不过日本人写的那本《30天制作操作系统》真心牛X,给跪了。我这个就是从那上面看到的,本来以为是他用的编译器版本太古老,结果发现GCC最新版也可以
2012年12月21日 15点12分
回复 God_of_喷 :纳尼,有空拜读一下
2012年12月21日 15点12分
level 11
God_of_喷 楼主
[瞌睡]本来还想多钓会鱼的,算了,公布答案吧。
C语言中数组p[3]事实上只是一个指向一段内存的指针p;
那么方括号中的数字就代表了偏移量,换句话说p[1]=p+1(当然我们汇编一般写成p&0x0001)
也就是把p向后面偏移一个单位长度。这也解释了为什么数组的第一个元素是p[0]不是p[1],因为p+0当然就指向数组第一个元素了。
既然p[1]=p+1,加法是可以前后交换的,那么1+p=1[p]又有什么不正确的?反正最后翻译成汇编都是一样的代码。
2012年12月21日 15点12分 9
回复 贫道法号悟能 :[鲁拉]妥妥的!翻译成汇编都是一样的,ADD p,0x0001(只是示意,不是正确语法)
2012年12月21日 15点12分
回复 贫道法号悟能 :编译原理看到自动机就全部晕了·····不过编译原理里面有讲到的,运算符的结合性
2012年12月21日 15点12分
总觉得有哪里不大对劲,但是说不清楚……
2012年12月21日 16点12分
回复 钢琴线2010 :[鲁拉]试试看啊,实践是检验真理的唯一标准
2012年12月21日 16点12分
level 6
c 挂了的 路过!
                  ————你可以无视我,我只是来凑足十五个字的。
2012年12月21日 16点12分 10
level 15
老子现在就试试
2012年12月21日 16点12分 11
等你结果,VC6没有测试。
2012年12月21日 16点12分
回复 God_of_喷 :xcode能过
2012年12月21日 16点12分
回复@不喷游戏只喷人 :结果正常么
2012年12月21日 16点12分
回复 God_of_喷 :恩
2012年12月21日 16点12分
level 11
因为数组里的元素靠 index=base + offset 来索引 而基址与偏移量都是值 无差异 所以位置可互换 以前看到有人这么写过代码 还真没去想[汗]
2012年12月21日 16点12分 12
level 11
God_of_喷 楼主
个人认为只有c可以这样写吧,其他语言也可以吗?不过你的解释是正确的
2012年12月21日 16点12分 13
c++应该也可以
2012年12月21日 16点12分
level 13
我表示我C语言都忘记了··············
2012年12月21日 16点12分 14
level 7
这样写肯定不行,“1”就不能是数组名。不能用它来指向内存空间中的一个地址。用VC++编译试试。
2012年12月21日 17点12分 15
c和c++是不一样的,gcc编译可以通过就说明c支持这样写
2012年12月22日 02点12分
level 6
大学全学过编程,但是我们男生那时候都在打cs
2012年12月22日 02点12分 17
level 11
指针嘛
2012年12月22日 03点12分 19
lz才高三这么厉害啊 自学的?像我们这些人都是随便选的专业 以前都不知道c语言是什么[汗]
2012年12月22日 03点12分
level 9
这个书上似乎有说过,问题是现实里似乎很少用到吧?
2012年12月22日 03点12分 21
只是说一下而已啦,没有考虑用处
2012年12月22日 04点12分
1