<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)C語言多維數(shù)組

          單片機(jī)C語言多維數(shù)組

          作者: 時(shí)間:2013-02-27 來源:網(wǎng)絡(luò) 收藏

          對于二維數(shù)組a[4][6];由于數(shù)組名代表數(shù)組的起始地址,所以a(第一層)和第一個(gè)元素a[0][0]地址的數(shù)字是相同的,但是意義卻是不同的。 對于該數(shù)組我們可以理解為:a的一維數(shù)組(第一層),它有四個(gè)元素a[0]、a[1]、a[2]、a[3](第二層),而每個(gè)元素又含有6個(gè)元素a[0] [0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5](第三層),…到此我們終于訪問到了每個(gè)元素了,這個(gè)過程我們 經(jīng)歷了:a->a[0]->a[0][0];

          整體來講:a是一個(gè)4行5列的二維數(shù)組,a表示它指向的數(shù)組的首地址(第一個(gè)元素地址a[0]),同時(shí)a[0]指向一行,它是這個(gè)行的名字 (和該行的第一個(gè)元素的首地址相同(第一個(gè)元素為地址a[0][0]))。所以從數(shù)字角度說:a、a[0]、a[0][0]是相同 的,但是他們所處的層次是不同的。

          既然a代表二維數(shù)組,那么a+i就表示它的第i+1個(gè)元素*(a+i)的地址,而在二維數(shù)組中

          *(a+i)又指向一個(gè)數(shù)組,*(a+i)+j表示這個(gè)數(shù)組的第j+1個(gè)元素的地址,所以要訪問這個(gè)元素可以使用 *(*(a+i)+j)(也就是a[i][j])。

          他們的示意圖為(虛線代表不是實(shí)際存在的):

          單片機(jī)多維數(shù)組

          對照這個(gè)圖,如下的一些說法都是正確的(對于a[4][6]):

          a是一個(gè)數(shù)組類型,*a指向一個(gè)數(shù)組;

          a+i指向一個(gè)數(shù)組;

          a、*a和a[0][0]數(shù)值相同;

          a[i]+j和*(a+i)+j是同一個(gè)概念;

          總結(jié)一下就是:我們對于二維指針a,他指向數(shù)組a[0,1,2,3],使用*,可以使他降級(jí)到第二層次,這樣*a就指向了第一個(gè)真正的數(shù)組。對于其他的情況我們也可以采用相同的方式,對于其他維數(shù)和類型的數(shù)組我們可以采用相類似的思想。

          說到指向數(shù)組的指針,我們還可以聲明一個(gè)指針變量讓它指向一個(gè)數(shù)組。例如:

          int (*p)[5];

          這時(shí)p就是一個(gè)指針,要指向一個(gè)含有5個(gè)int類型元素的數(shù)組,指向其他的就會(huì)出現(xiàn)問題。這個(gè)時(shí)候我們可以使用上面的什么東西來初始化呢?我們可以使用*a,*(a+1),a[2]等。原因很簡單:我們在一個(gè)二維的數(shù)組中,那么表達(dá)方式有上面的相互類似的意義呢?只有 *a,*(a+1),a[2]等。

          c語言相關(guān)文章:c語言教程




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();