C语言中的多维数组与指针

最近学完了C语言指针的基本内容,开始学习多维数组与指针,写下一点自己的学习心得。C语言中的多维数组指针是比较复杂的,需要多理解和多思考,先举个例子,对于一个二维数组a,他有三行四列。如图所示:

a[0]
1
3
5
7
a[1]
9
11
13
15
a[2]
17
19
21
23

可以看到这个数组包含了12个元素,一共有3行,4列,我们可以这样看,这个二维数组是由3个一维数组所组成的,每个一维数组又包含了4个元素,a[0][0],a[0][1],a[0][2]

在一维数组中,a代表了数组的首元素地址,那么在二维数组中,a代表了就是第0行的首地址,那么第一行的首地址就是 a+1, 如果我们说第0行的首地址是2000,在Turbo C 中第1行的地址就是2008,因为第0行有4个整型数据,他们在内存单元中占据了4*2=8个内存单元,所以a+1的首地址就是2008那么由此可以推导出,a+1就是a[1]的地址,同理可以推导出 a+2就是a[2]的首地址……

    a[0]  a[1]   a[2]是一维数组名,C语言规定 数组名代表数组首元素的地址,所以a[0]就是a[0][0]的地址,也就等于&a[0][0]   a[1]=&a[1][0]    a[2]=&a[2][0]

 那么  第0行1列的元素地址怎么表示呢? a[0]这个一维数组名代表的是第0行的首地址,注意,a代表的是列的首地址,而a[0]则代表的是行的首地址,如果说第1行是a+1,那么第一列就是a[0]+1,以此类推……  因为a指向的是a[0]的地址。所以a其实是一个指针变量,他存放的是a[0]的地址,然而a[0]则存放的是a[0][0]的首地址,那么前面已经知道,*a等于a[0],因为a中存放的是a[0]所在的地址,那么我们要求a[0][0]的地址就应该是* *a,或者*a[0]也就是说,这个指针其实有两个指向。请看图:

  看图应该就很清楚了,写到这里,如有错误望各位前辈请多多指教微笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章