一个问题

正在无聊中 2013-07-06 07:53:49
下列和*(a+2)等价的是:
A.a[3]
B.*a
C.2[a]
D.*a+2

目测感觉一个都不对
...全文
227 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉睡的关耳 2013-07-09
  • 打赏
  • 举报
回复
必须是A啊,因为*是取地址符,括号里面是数组的首地址1加上2就等于a[3]了
技术first 2013-07-09
  • 打赏
  • 举报
回复
我还以为楼主写错了呢,长知识了
anshiny 2013-07-09
  • 打赏
  • 举报
回复
C
jilianglijie 2013-07-09
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
C VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
zhaolao您又来拿分了
jilianglijie 2013-07-09
  • 打赏
  • 举报
回复
C 选项也是标准写法,只不过不常用
赵4老师 2013-07-08
  • 打赏
  • 举报
回复
C VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
LubinLew 2013-07-08
  • 打赏
  • 举报
回复
我觉得这个问题还是<<征服C指针>>中写的容易理解 首先最早的C是没有数组的概念, 对类似于数组的操组 arrary[5] = 1,都是写成*(arrary+5) = 1的, 由于这种操作非常频繁,于是就将*(arrary+5)标记为arrary[5];这样更容易书写, 这也叫做语法糖,只是一种更容易的书写方式. 所以编译器在编译时就将arrary[5]解释成*(arrary+5), 自然 5[arrary] = *(5+arrary) = *(arrary+5) = arrary[5]
aiwudezhang 2013-07-07
  • 打赏
  • 举报
回复
当然是D啊! A.a[3] B.*a C.2[a] D.*a+2 a[3]//这个是变量数组吧? *a//这是一个指针变量吧? 2[a]//这个也是一个数组吧? *a+2只有这个进行了运算,将a与2相加,然后在指向了a。
艾薇儿More 2013-07-07
  • 打赏
  • 举报
回复
肯定是c啊,2[a]相当于*(2+(a))也就是a[2];翻看《c和指针》的144页,就明白了。只不过平常我们不会这样写对吧。
AnYidan 2013-07-06
  • 打赏
  • 举报
回复
这种题目除了唬人外,实在看不处有何好处 c 语言最让人诟病之一就是写法太灵活
一根烂笔头 2013-07-06
  • 打赏
  • 举报
回复
2[a]是正确的,这种用法是比较老的标准里面的,现在已经不常用了。编译器依旧支持这种格式
水平不流 2013-07-06
  • 打赏
  • 举报
回复
a[2] = *(a+2) = *(2+a) = 2[a]; 就是这样推过来的.明白了么.
水平不流 2013-07-06
  • 打赏
  • 举报
回复
C是正确的. 只不过是写法不同而已. a[2] == 2[a]; 但是很少有人用这种写法,也不建议这么用. 算是数组的一种特殊写法吧.
qzf362269994 2013-07-06
  • 打赏
  • 举报
回复
c编译成功能输出正确结果,但以前没看到过这么写啊,坐等大神解释
qzf362269994 2013-07-06
  • 打赏
  • 举报
回复
不知道C对不对没见过,我去试试

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧