C语言概念问题!!

来源:百度知道 编辑:UC知道 时间:2024/06/15 21:05:14
对于一个数组,某行的首地址和该行0列地址这2者有什么区别?
为什么对于一个2维数组a[i][j],a+1和*(a+1)都是一个地址?

对二维数组而言,某行首地址可a[n],a+n,&a[n][0]表示,你所说的某行的首地址和该行0列地址
是一个地址,只是表示方式有所不同,有的是行指针,有的则是列指针,区分的办法就是你在那个地址后加1看看表示的是什么,如果表示的是下一行的地址,则是行地址,如a+1.如果表示的是这一行下一列的地址,刚是列地址,如a[0]+1
你所问的 a+1与*(a+1)都是一个地址,但前者是行地址,后者是列地址,区别的方法就是我上面说的

C语言初学者入门讲座 第十二讲 多维数组的指针变量
作者:佚名 文章出处:电脑软硬件应用网 更新时间:2007-3-19

一、多维数组地址的表示方法

设有整型二维数组a[3][4]如下:

0 1 2 3
4 5 6 7
8 9 10 11

设数组a的首地址为1000,各下标变量的首地址及其值如图所示。

在前面曾经介绍过, C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为 1000。*(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址。也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],* (a+0),*a,&a[0][0]是相等的。同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。 &a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。<