您的位置:首页 > 编程语言 > C语言/C++

关于一个C语言二维数组的问题

2012-04-24 11:55 288 查看
http://zhidao.baidu.com/question/415233232.html?quesup2&oldq=1

前几天去华为赛门铁克笔试,有一道题:int a[5][5]; int (*p)[3]; p = a; &p[4][2]-&a[4][2]=?
——————————————
您的回答是这样的:
首先:p=a;是非法的,类型不同
a的地址要给d得强制转换: p=(int(*)[3])a;
这样的话&p[4][2]-&a[4][2] =a+3*4+2-(a+5*4+2) = 14-22= -8
##################
我想问问,这里是-8,是指的在二维数组中的“差距”(我姑且这样理解),可是“&p[4][2]”前面有个取地址符,是内存地址,因为int型数据占四个字节,那答案为什么不是-8*4呢?这一点疑惑很久了,请您指教,谢谢!

&[4][2]和&a[4][2]都是个int*,它们的差是以int的长度为单位的 -8的意思是它们之间有8个int的距离,例如有int a[3] 那么 &a[1]-&a[0]就是1,就是1个int长度,但是从绝对数值上是看是4个字节

这样就是-32了:
(char*)&p[4][2]-(char*)&a[4][2]);   //char是一个字节,那它们的差就是绝对字节长度了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: