c语言二维数组代码,C语言之二维数组(示例代码)
二維數組及其指針
1 ) 在了解二維數組之前,我們先來了解一維數組及其指針
我們知道,一維數組中:數組名代表-->數組首元素的首地址(千萬不要認為是數組的首地址(&a),絕對不是)在內存中,該代碼的表現形式如下圖:
#include
{
int?a[4];
int?*p??=?a;??//表明該指針指向了數組的首元素地址,當然也可以寫為?int?*p?=?&a[0];
return?0;
}
-- 這時候,對指針取值(*p),就是對取出指向地址&a[0]中的值的就是a[0]的數據。
----------------------------------分割線------------------------------------
2 )下面我們進入二維數組的介紹,首先,請看一段代碼:#include
intmain()
{
inta[2][4]?=?{1,2,3,4,
5,,4,5,6};
return0;
}該代碼的表現形式如下圖:
??右邊的a[ 0 ] [ 0 ]??這些數據對應的是二維數組中(每個數組中的元素)。
了解了二維數組在內存中的表現形式:
--我們開始引入數組指針的概念:
2.1)??顧名思義:數組指針就是指向數組的指針,根據復雜類型的確認 ,數組指針形式為 ?int(*p)[ 3 ]; 表明該指針指向了(有三個int型數據)的數組 ,那么該數組名 a 就是數組a[ 0 ]的首地址,即(&a[ 0 ],也可寫為a)
---(這點和一維數組的數組名相同----->都是數組首元素的首地址)
(***注意:該 圖形兩塊不同的區域代表兩個不同的數組----后面跟著的是每一個數組里面包含的元素)
2.2)?a[ 0 ]這個數組名 代表了a[ 0 ]這個數組里面 a[ 0 ][ 0 ]的值的地址, 即----> a[ 0 ] == &a[ 0 ][ 0 ] ? -
對于a[ 0 ]---- 這里可理解(不可畫等號)為a[ 0 ] 是一個指針 ( 因為數組名是該首元素a[ 0 ][ 0 ]的地址嘛,既然是地址,就必須用指針來接收 )。
2.3)p = a ;就是指向了a[ 0 ]這個數組的首地址。 也可寫成&a[ 0 ];? 名為二維數組的行指針
那么如果對?p?進行?p +1?操作,就表示地址移動到下一行(移動了sizeof(int)*4 = 16個字節),就是下一個數組的地址 -- 如上圖所示
技巧 - - ?/ * 我們將二維數組依次看作一維數組逐步分析 * /
2.4)所以?p = a ?+ i?; ? 等價于 ??p = &a[ 0 ] + i
這是行指針的概念,如果對 p 取 * 運算符,表示取出 p 指向的內容,而 p 指向的的內容就是a[ 0 ], ? ??行指針用來確定對哪一個數組的值進行操作,? 直觀的就是,這這個二維數組中, 選 a[ 0 ], a[ 1 ]這兩個之中的其中一個進行操作),
2.5)*p ?= *(&a[ ?0 ])=a[ 0 ],* (p + i) = a[ i ](c語言中,方括號[ ]運算符和*()運算符一致,可互換)
a[ 0 ] ?+ i ? == ?&a[ 0 ][ 0 ] + i就是列指針的概念(對數組的每一個元素進行操作),對a[ 0 ]這個數組里面的元素地址 + i ,指到相應元素a[ 0 ][ i ]的地址 ?即&a[ 0 ][ i ]我們已經知道a[ 0 ]就是a[ 0 ][ 0 ]的值的地址,即&a[ 0 ][ 0 ]? ?所以如果對a[ 0 ]取?* 運算符,得到的就是a[ 0 ][ 0 ]的值。
即*(?a[ 0 ]+ i)= a[ 0 ][ i ]
--------------------------------------看了這些不知道對各位朋友有無幫助。
下面我對二級指針做一個畫圖分析: 讓我們更深一步的理解二維數組指針
---------------------------------------------------------------------------------------------------
在文中有什么不對或者需要改進的地方,請各位朋友對我給出寶貴的意見和建議
總結
以上是生活随笔為你收集整理的c语言二维数组代码,C语言之二维数组(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建设银行属于什么性质银行?
- 下一篇: c语言程序stm8s,stm8s的c语言