求一C语言的问题

cc940921430 2011-08-30 09:51:49
设a为一个二维数组有三行四列,a[i]与*(a+i)等价吗? 书上说a[1]+2与*(a+1)+2等价不理解????





谢谢~~~~~
...全文
152 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc940921430 2011-09-08
  • 打赏
  • 举报
回复
谢谢haoxiangyoudianmingbaile
赵4老师 2011-08-31
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
lhl414616 2011-08-31
  • 打赏
  • 举报
回复
等价的,数组名相当于指针*(a+1)相当是啊a[1],在他们外面加就相当改变列了
tony2278 2011-08-31
  • 打赏
  • 举报
回复
等价~
Sniper80KG 2011-08-31
  • 打赏
  • 举报
回复
等价,数组名就是数组首地址的指针
xxxxllll 2011-08-31
  • 打赏
  • 举报
回复
写法不同而已
RobbieWilliams 2011-08-31
  • 打赏
  • 举报
回复
显然相等了
w346581442 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xingfu0539 的回复:]
从内存的角度来看就行了,a代表数组的首地址,a[1]代表第二行的首地址,注意此时对a直接增减都是以行为单位的,对a[i]进行增减都是按照元素大小为单位的(比如你所定义的char,int或者long型)。
[/Quote]这话是对的,但理解起来有点困难
xiaoshu101 2011-08-30
  • 打赏
  • 举报
回复
五楼正解
新加坡下雨了 2011-08-30
  • 打赏
  • 举报
回复
a[i]与*(a+i)等价,前者看着直观,后者是指针。a[1][2]=a[2*1+2]

a[1]+2与*(a+1)+2:前者a[1]的意思是第一行,+2是第2列的那个值,后者和前者一样
我是五道风 2011-08-30
  • 打赏
  • 举报
回复
从内存的角度来看就行了,a代表数组的首地址,a[1]代表第二行的首地址,注意此时对a直接增减都是以行为单位的,对a[i]进行增减都是按照元素大小为单位的(比如你所定义的char,int或者long型)。
仙度瑞城 2011-08-30
  • 打赏
  • 举报
回复
假设你的这个二维数组是 a[3][4]
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[i]是第i行的首地址..加个数字就是往后偏移..
a相当于一个二级指针...*(a+1)得到第一行的首地址..
尘缘udbwcso 2011-08-30
  • 打赏
  • 举报
回复
AnYidan 2011-08-30
  • 打赏
  • 举报
回复
画个图就明白了
tianxiao1101 2011-08-30
  • 打赏
  • 举报
回复
等价。。。a[1]+2与*(a+1)+2 它俩均指向 a[1][2]

69,373

社区成员

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

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