C语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+i)还表示一个地址的值?求高手详细解释

 我来答
陈宗权8d804
2011-03-22 · TA获得超过3766个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:953万
展开全部
a是一个二维数组,a[i]表示其中的一行,是个一维数组,a[i][j]表示一行里面的一个元素。
*(a+i)就是a[i],是一个一维数组,当然表示一个地址,表示这个一维数组里面的第一个元素a[i][0]的地址。
问号朵朵
2011-03-22 · TA获得超过3.4万个赞
知道小有建树答主
回答量:2383
采纳率:0%
帮助的人:668万
展开全部
表达错误,差1错误:
a[i][j]的地址应该表示为:*(a+i-1)+j-1
例:int a[3][4]; 则:
*(a):表示第一行的首地址,即:(*(a))[0],表示第一行第一个元素地址,值为:*((*(a))[0])。
*(a+1):表示第二行的首地址,即:(*(a+1))[0],表示第二行第一个元素地址,值为:*((*(a+1))[0])。
*(a+2):表示第三行的首地址,即:(*(a+2))[0],表示第三行第一个元素地址,值为:*((*(a+2))[0])。
*(a+3-1)+4-1:表示最后一个元素的地址。它的值是:*(*(a+3-1)+4-1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dongjunwen90
2011-03-22 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:92.6万
展开全部
依据《c语言深度剖析》“多维数组与多级指针”章节 原文如下:
以数组下标的方式来访问其中的某个元素:a[i][j]。编译器总是将二维数组看成是一个
一维数组,而一维数组的每一个元素又都是一个数组。a[3]这个一维数组的三个元素分别为:
a[0],a[1],a[2]。每个元素的大小为 sizeof(a[0]),即 sizof(char)*4。
由此可以计算出 a[0],a[1],a[2]
三个元素的首地址分别为& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4。亦即 a[i]
的首地址为& a[0]+ i*sizof(char)*4。这时候再考虑 a[i]里面的内容。就本例而言,a[i]内有 4
个 char 类型的元素,其每个元素的首地址分别为&a[i],&a[i]+1*sizof(char),
&a[i]+2*sizof(char),&a[i]+3*sizof(char),即 a[i][j]的首地址为&a[i]+j*sizof(char)。再把&a[i]
的值用 a 表示,得到 a[i][j]元素的首地址为:a+ i*sizof(char)*4+ j*sizof(char)。同样,可以换
算成以指针的形式表示:*(*(a+i)+j)。
追问
能解释一下sizof(char)是什么意思吗?
还有sizeof的意思也解释一下,看到过,但不知道什么意思
追答
sizeof(char)就是取字符类型在内存中占的字节数,和计算机的位数有关,一般都是占一个字节。
“sizof(char)”是误写!!
去百度文库下载《c语言深度剖析》看一下吧,要pdf格式的那种。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
涓涓细流shiyi
2011-03-22 · TA获得超过159个赞
知道答主
回答量:234
采纳率:0%
帮助的人:115万
展开全部
在这里,*a[i]是一个指针变量,它指向含j个元素的一维数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式