亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言 指針與二維數組詳解

2020-01-26 14:27:40
字體:
來源:轉載
供稿:網友

二維數組在概念上是二維的,有行和列,但在內存中所有的數組元素都是連續排列的,它們之間沒有“縫隙”。以下面的二維數組 a 為例:

int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };

從概念上理解,a 的分布像一個矩陣:

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

但在內存中,a 的分布是一維線性的,整個數組占用一塊連續的內存:

C語言中的二維數組是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 個元素也是依次存放。數組 a 為 int 類型,每個元素占用 4 個字節,整個數組共占用 4×(3×4) = 48 個字節。

C語言允許把一個二維數組分解成多個一維數組來處理。對于數組 a,它可以分解成三個一維數組,即 a[0]、a[1]、a[2]。每一個一維數組又包含了 4 個元素,例如 a[0] 包含 a[0][0]、a[0][1]、a[0][2]、a[0][3]。

假設數組 a 中第 0 個元素的地址為 1000,那么每個一維數組的首地址如下圖所示:

為了更好的理解指針和二維數組的關系,我們先來定義一個指向 a 的指針變量 p:

int (*p)[4] = a;

括號中的*表明 p 是一個指針,它指向一個數組,數組的類型為int [4],這正是 a 所包含的每個一維數組的類型。

[ ]的優先級高于*,( )是必須要加的,如果赤裸裸地寫作int *p[4],那么應該理解為int *(p[4]),p 就成了一個指針數組,而不是二維數組指針,這在《C語言指針數組》中已經講到。

對指針進行加法(減法)運算時,它前進(后退)的步長與它指向的數據類型有關,p 指向的數據類型是int [4],那么p+1就前進 4×4 = 16 個字節,p-1就后退 16 個字節,這正好是數組 a 所包含的每個一維數組的長度。也就是說,p+1會使得指針指向二維數組的下一行,p-1會使得指針指向數組的上一行。

數組名 a 在表達式中也會被轉換為和 p 等價的指針!

下面我們就來探索一下如何使用指針 p 來訪問二維數組中的每個元素。按照上面的定義:

1) p指向數組 a 的開頭,也即第 0 行;p+1前進一行,指向第 1 行。

2) *(p+1)表示取地址上的數據,也就是整個第 1 行數據。注意是一行數據,是多個數據,不是第 1 行中的第 0 個元素,下面的運行結果有力地證明了這一點:

#include <stdio.h>int main(){ int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; int (*p)[4] = a; printf("%d/n", sizeof(*(p+1))); return 0;}

運行結果:

16

3) *(p+1)+1表示第 1 行第 1 個元素的地址。如何理解呢?

*(p+1)單獨使用時表示的是第 1 行數據,放在表達式中會被轉換為第 1 行數據的首地址,也就是第 1 行第 0 個元素的地址,因為使用整行數據沒有實際的含義,編譯器遇到這種情況都會轉換為指向該行第 0 個元素的指針;就像一維數組的名字,在定義時或者和 sizeof、& 一起使用時才表示整個數組,出現在表達式中就會被轉換為指向數組第 0 個元素的指針。

4) *(*(p+1)+1)表示第 1 行第 1 個元素的值。很明顯,增加一個 * 表示取地址上的數據。

根據上面的結論,可以很容易推出以下的等價關系:

a+i == p+i
a[i] == p[i] == *(a+i) == *(p+i)
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)

【實例】使用指針遍歷二維數組。

#include <stdio.h>int main(){ int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; int(*p)[4]; int i,j; p=a; for(i=0; i<3; i++){  for(j=0; j<4; j++) printf("%2d ",*(*(p+i)+j));  printf("/n"); } return 0;}

運行結果:

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

指針數組和二維數組指針的區別

指針數組和二維數組指針在定義時非常相似,只是括號的位置不同:

int *(p1[5]);  //指針數組,可以去掉括號直接寫作 int *p1[5];
int (*p2)[5];  //二維數組指針,不能去掉括號

指針數組和二維數組指針有著本質上的區別:指針數組是一個數組,只是每個元素保存的都是指針,以上面的 p1 為例,在32位環境下它占用 4×5 = 20 個字節的內存。二維數組指針是一個指針,它指向一個二維數組,以上面的 p2 為例,它占用 4 個字節的內存。

以上就是C語言 指針和二維數組的資料整理,后續繼續補充相關知識,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色妞在线综合亚洲欧美| 欧美另类xxx| 国产成人精品免高潮费视频| 国产suv精品一区二区三区88区| 国产精品美女av| 中文字幕一精品亚洲无线一区| 精品久久久久久久大神国产| 日韩有码在线播放| 欧美精品一区二区免费| 日韩在线播放一区| 欧美在线一区二区三区四| 欧美日韩国产页| 久久激情视频免费观看| 国产精品爽爽ⅴa在线观看| 日本国产高清不卡| 国产精品美女在线观看| 中文字幕精品av| 91日本在线视频| 亚洲精品日产aⅴ| 按摩亚洲人久久| 久久精品人人爽| 日韩在线观看免费| 一本一本久久a久久精品牛牛影视| 国产精品一区专区欧美日韩| 俺也去精品视频在线观看| 一区二区三区国产视频| 欧美激情视频网址| 久久亚洲私人国产精品va| 中文字幕综合一区| 久久久国产一区二区| 欧美理论电影在线播放| 国产成人鲁鲁免费视频a| 6080yy精品一区二区三区| 激情av一区二区| 国产精品香蕉国产| 色哟哟入口国产精品| 国产精品久久婷婷六月丁香| 欧美丰满少妇xxxx| 日韩一区av在线| 久久久久久久一| 日韩av理论片| 欧美精品videosex牲欧美| 人人澡人人澡人人看欧美| 国内成人精品视频| 色噜噜久久综合伊人一本| 亚洲天堂一区二区三区| 日韩大胆人体377p| 国产精品视频xxx| 欧美日本亚洲视频| 久久精品国产一区二区三区| 91久久在线视频| 国产精品露脸自拍| 国产精品av免费在线观看| 国产日韩欧美综合| 欧美激情免费观看| 成人福利网站在线观看| 欧美大尺度激情区在线播放| 国内成人精品视频| 日韩有码在线播放| 国产极品jizzhd欧美| 成人免费xxxxx在线观看| 欧美最顶级丰满的aⅴ艳星| 国产日本欧美在线观看| 日韩电影中文字幕一区| 17婷婷久久www| 欧美综合在线第二页| 国产精品人成电影在线观看| 日韩动漫免费观看电视剧高清| 麻豆国产精品va在线观看不卡| 搡老女人一区二区三区视频tv| 麻豆乱码国产一区二区三区| 中文字幕日韩在线观看| 欧美日韩性视频在线| 另类少妇人与禽zozz0性伦| 亚洲成人亚洲激情| 国产日韩精品一区二区| 国产视频精品一区二区三区| 91在线观看免费高清完整版在线观看| 欧美交受高潮1| 国模精品视频一区二区| 亚洲天堂免费观看| 中文字幕亚洲综合久久筱田步美| 亚洲人成电影在线观看天堂色| 亚洲自拍偷拍第一页| 国产啪精品视频| 成人午夜激情免费视频| 国外成人免费在线播放| 日韩av成人在线观看| 日韩欧美一区二区三区| 国产精品99导航| 欧美日韩激情美女| 国产精品丝袜久久久久久不卡| 91亚洲精品久久久久久久久久久久| 91欧美激情另类亚洲| 国产精品爽爽爽| 亚洲免费av电影| 久久精品国产成人精品| 久久97久久97精品免视看| 成人网址在线观看| 久久久久久久久久久久av| 操人视频在线观看欧美| 久久国产精品视频| 中文字幕av一区| 在线视频免费一区二区| 久久久视频在线| 日韩av片免费在线观看| 91精品国产免费久久久久久| 成人精品久久一区二区三区| 国产亚洲一级高清| 欧美激情综合色综合啪啪五月| 精品国产91久久久久久老师| 国产亚洲激情视频在线| 欧美日韩亚洲精品一区二区三区| 国产欧美一区二区三区在线| 97超级碰碰人国产在线观看| 亚洲国产成人精品久久久国产成人一区| 亚洲欧美日韩中文在线制服| 91精品国产91久久久久| 亚洲精品综合久久中文字幕| 欧美老女人bb| 日韩美女写真福利在线观看| 亚洲开心激情网| 国产欧美日韩精品丝袜高跟鞋| 91久久夜色精品国产网站| 成人写真福利网| 久久伊人精品一区二区三区| 91成人天堂久久成人| 亚洲最大成人网色| 成人黄色大片在线免费观看| 这里只有精品久久| 日韩中文在线观看| 欧美在线视频导航| 欧美一级成年大片在线观看| 亚洲欧美视频在线| 国产一区二区欧美日韩| 欧美成人精品一区二区| 美日韩丰满少妇在线观看| 亚洲国产精品yw在线观看| 日韩成人在线视频| 亚洲国产成人精品电影| 国产精品入口免费视| 久久久精品国产亚洲| 久久亚洲成人精品| 国产精品久久久久久久久久ktv| 中文字幕国产精品久久| 欧美成人h版在线观看| 欧美美最猛性xxxxxx| 欧美黑人狂野猛交老妇| 亚洲一区二区三区sesese| 国产精品欧美久久久| 欧美午夜女人视频在线| 久久国产精品影视| 性欧美暴力猛交69hd| 在线看日韩欧美| 日韩精品在线看| 国产精品国语对白| 成人激情视频在线| 欧美日韩激情网| 欧美性猛交视频| 中文字幕在线国产精品| 国产精品免费一区二区三区都可以| 色香阁99久久精品久久久| 国产a∨精品一区二区三区不卡| 国内偷自视频区视频综合|