作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/02 00:48:51
C语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+i)还表示一个地址的值?求高手详细解释
依据《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格式的那种。