91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二維數組和它的指針

發布時間:2020-07-14 14:43:49 來源:網絡 閱讀:443 作者:寒風飄葉22 欄目:編程語言

這片文章介紹二維數組int a[ i ] [ j ]中的符號:a,&a[ i ],&a[ i ][ j ],a[ i ][ j ],&a[ i ] [ j ]的含義,重點在后面第二部分的分析,但是前面第一部分的復習數組指針,指針數組和二維指針是前提,前面的不會,后面的沒法理解。這片文章寫的有些費勁,個人能力不夠,可能會有錯誤,希望各位朋友能夠指正,共同進步。//握手

一:先回顧一下數組指針,指針數組,二維指針

先根據逐層分析分方法分析下面的代碼 
(1)int (*p)[5]; 
(2)int *p[5]; 
(3)int **p;

看到上面的定義方式一一分析 
分析(1) 
第一步:找核心,核心是p 
第二步:由p向外一層分析,p和*結合是指針,再和[]結合,所以int (*p)[5] 是數組指針

分析(2) 
第一步:找核心,核心是p 
第二步:由核心p向外一層分析,p先和[]結合是數組,數組中元素是*類型,所以int *p[5];是指針數組。

分析(3) 
第一步:找核心,核心是p 
第二步:由p向外一層分析,p先和結合是指針,然后*p再和結合是指針的指針,即二重指針。

(4)二重指針和指針數組 
二重指針就是指針數組指針(有點亂哈)

先看指針數組 int *p[5]; 
(1)p是一個數組,數組有5個元素,每個元素都是int*類型 
(2)指向int * 類型的指針不就是int**嘛 
(3)得出結論,二重指針就是指針數組指針。

二:二維數組和指針的糾纏

先定義一個二維數組 int a[ i ] [ j ]; 
a是二維數組數組名,把二維數組看成一個平面。i表示有i行,j表示每行有j列。有一個一維數組int a[ 10 ],寫成二維數組就是int a[ 2 ] [ 5 ],把10個元素分成2組,每組有5個元素。i表示第一維表示有多少組,j表示每組有多少元素。

符號含義 int a[ 2 ][ 5 ];int a[ i ] [ j ];

跟著思路一步一步走

第一維表示有2個一維數組分別是 a[ 0 ]和a[ 1 ](也就是a[ i ]和a[i+1]) 
第二維表示在這兩個數組中分別有5個元素。

那么第一個問題來了

兩個數組的數組名是誰?

對,a[ i ]和a[i+1] 既然a[ i ]和a[ i+1 ] 是一維數組名

那么第二個問題來了?

a[ i ]和a[ i+1 ]類型是什么?

一維數組數組名做右值表示數組首元素的首地址,首元素是int,首元素的地址是int * ,&b做右值表示整個數組的首地址,類型是int(*)[] 
int b[10]; 
int *p; 
p = b;

所以 a[i]這個數組名做右值表示數組首元素的首地址,首元素是一個數組,首元素的地址,數組的首地址是int * ,&a[i]表示整個數組的首地址(這個整個數組時指包含兩個數組的那個數組)

!!這里很重要: 
迷惑1:a[i]做右值不是表示數組首元素的首地址嗎?首元素是一個數組,那么其類型應該是數組的指針啊,類型是int( * ) [ ];

解答:a[i]這個數組名做右值確實表示數組首元素的首地址,比如int b[10];數組名b做右值表數組首元素的首地址,也就是相當于&b[0],那再二維數組中,a[ i ]和a[i+1]分別是兩個數組,每個數組有5個int元素,這么一想就是了:a[ 0 ]這個數組名做右值時等價于&a[0][0],第1個數組的 
第1個元素,第一個元素是int類型,所以a[ i ]是int* 類型的指針。&a[ i ]表示整個數組(包含i個數組的大數組)的首地址,也就是看的是a[ i ]和a[ i+1 ]這兩個數組的首地址,所以&a[ i ]的類型才是數組指針,int( * ) [ ];二維數組名a和&a[ i ]類型一致。

二維數組的運算 
int b[ 10 ]; 
下標訪問b[ 1 ] 
指針訪問* ( b+1)

int a[ 2 ] [ 10 ] 
下標訪問a[ 1 ] [ 1 ] 
指針訪問* ( * (a+1)+1)

分析:a是二維數組的數組名,在這肯定做右值,a做右值等價于&a[0]也就是第一個數組的首地址,(總共有兩個數組),類型是int(*)[];這時候當a+1時,a指向誰?a是數組指針,a肯定指向數組,這時候a+1,偏移量為a[i]這個數組的大小,指向了a[1]這個小數組。每個小數組有5個元素,大小是一個int。這時候j的偏移量就是一個int的大小。

總結: 
(1)int a[ i ][ j ];二維數組表示有i個小數組,沒個小數組有j個元素。 
(2)a[ 0 ]做右值表示& a[ 0] [ 0 ] 
&a[ 0 ]做右值和二維數組名a做右值含義一樣。 
(3)a[ i ][ j ]表示每一個元素,每一個元素都是int類型的。 
&a[ i ] [ j ]表示int* 類型的指針。 
(4)a[ i ] [ j ] 等價于 * (* (a+i)+j)

二維數組比較難理解,難道真的是只可意會不可言傳?雖然寫了這篇文章,但總感覺不是很對,以我目前的水平無法找出錯誤,請高手指點。//感謝


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山西省| 义马市| 平利县| 太康县| 苍山县| 凌云县| 濉溪县| 夏津县| 永修县| 建瓯市| 达日县| 广州市| 阜平县| 桃园市| 老河口市| 汤原县| 南华县| 漳浦县| 祥云县| 陈巴尔虎旗| 平原县| 石狮市| 辉县市| 黄石市| 夹江县| 江永县| 平塘县| 小金县| 靖远县| 鲜城| 通渭县| 永胜县| 汉川市| 呼伦贝尔市| 长白| 镇宁| 东城区| 台前县| 洛扎县| 徐汇区| 精河县|