基礎(chǔ)C++教學(xué)??009【C中通過指針引用多維數(shù)組】2019-12-22

←↑→↓↖↙↗↘??
unicode=Geometric Shapes
? 僅僅個別字不同的時候的對比標(biāo)識

? 著重強調(diào)

??◆ 1弹澎、
??◆ 2、
??◆ 3、

??
??
??
??
??
??
??
??

Miscellaneous Symbols

?
Dingbats
? 重點記憶侥啤,個人總結(jié)的點,或者知識茬故。
??
?

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

    printf("a[0]=%x\n",a[0]);
    printf("a[1]=%x\n",a[1]);
    printf("a[2]=%x\n",a[2]);

    printf("%c",'\n');

    printf("a=%x\n",a);
    printf("a+0=%x\n",a+0);
    printf("a+1=%x\n",a+1);
    printf("a+2=%x\n",a+2);
a[0]=61fedc
a[1]=61fee8
a[2]=61fef4

a=61fedc
a+0=61fedc
a+1=61fee8
a+2=61fef4

??用visual studio運行查看內(nèi)存:

??數(shù)組首地址為0x00d5fd5c盖灸,因為一個int占4字節(jié), 3個int就是12字節(jié)均牢,等于0x0c糠雨。
??0x00d5fd5c+0x0c=0x00d5fd68正好等于a[1]a[2]的值計算方式相同徘跪。
??結(jié)論:a[0]甘邀、a[1]、a[2]垮庐,各為二維數(shù)組第一維的起始地址松邪。

??需要注意的點:
??a[0]=61fedc 和 a+0=61fedc,值相同哨查,但是含義相同嗎逗抑?
??如何驗證呢?寒亥?

    printf("a[0]+1=%x\n",a[0]+1);
    printf("a+0+1=%x\n",a+0+1);
a[0]+1=61fee0
a+0+1=61fee8

??根據(jù)地址輸出邮府,可以看到同樣都執(zhí)行了操作+1,但是得出的結(jié)果卻不同,這說明了雖然a[0]和a+1輸出值相同溉奕,但是卻代表不同含義褂傀。
??下圖簡要的標(biāo)識了兩者之間的不同關(guān)系。

??回顧一維數(shù)組的取值方式:

??明確:

??1加勤、二維數(shù)組仙辟,要取值,要使用2對[ ][ ]符號鳄梅。

??2叠国、從一維數(shù)組來說,方括號[ ]和星號*的作用相同戴尸。一維數(shù)組要取值粟焊,要么表達式使用[ ],要么使用*孙蒙。

??3项棠、從二維數(shù)組來說,常規(guī)使用2對[ ][ ],上所述[ ]*作用相同,所以理論上二維數(shù)組取值可以使4種方式:

??下面使用程序進行驗證四種方式:

     printf("a[0][0]=%x\n",a[0][0]);
     printf("*(a[0]+0)=%x\n",*(a[0]+0));
     printf("*(a+0)[0]=%x\n",*(a+0)[0]);
     printf("*(*(a+0)+0)=%x\n",*(*(a+0)+0));
a[0][0]=1
*(a[0]+0)=1
*(a+0)[0]=1
*(*(a+0)+0)=1

??到目前為止嚎花,情況一切都很美好桑包,但是,還不夠全面皆尔。
??只驗證了第一維的第一個元素,后面的情況如何?
??1掷匠、[ ][ ]式

    printf("a[0][0]=%x\n",a[0][0]);
    printf("a[0][1]=%x\n",a[0][1]);
    printf("a[0][2]=%x\n",a[0][2]);
a[0][0]=1
a[0][1]=2
a[0][2]=3

??2、[ ]*式 ( [ ] 在括號內(nèi)岖圈,先進行運算 )

    printf("*(a[0]+0)=%x\n",*(a[0]+0));
    printf("*(a[0]+1)=%x\n",*(a[0]+1));
    printf("*(a[0]+2)=%x\n",*(a[0]+2));
*(a[0]+0)=1
*(a[0]+1)=2
*(a[0]+2)=3

??3讹语、* *式

    printf("*(*(a+0)+0)=%x\n",*(*(a+0)+0));
    printf("*(*(a+0)+1)=%x\n",*(*(a+0)+1));
    printf("*(*(a+0)+2)=%x\n",*(*(a+0)+2));
*(*(a+0)+0)=1
*(*(a+0)+1)=2
*(*(a+0)+2)=3

??4、* [ ]式

    printf("*(a+0)[0]=%x\n",*(a+0)[0]);
    printf("*(a+0)[1]=%x\n",*(a+0)[1]);
    printf("*(a+0)[2]=%x\n",*(a+0)[2]);
*(a+0)[0]=1
*(a+0)[1]=6
*(a+0)[2]=7

??嗯蜂科。顽决?短条??才菠?茸时?

??這?赋访?可都?出現(xiàn)了超出預(yù)期的結(jié)果。對比數(shù)組的定義如下:

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

??出現(xiàn)的結(jié)果蚓耽,變成了3個維度的各第一個元素渠牲。這和預(yù)計的初衷不同。
??反思問題在哪步悠?對的签杈,應(yīng)該是 運算符優(yōu)先級
??根據(jù)c語言語法贤徒,*(a+0)[0]這個表達式中芹壕,各運算的優(yōu)先級為:

??這意味著:

??原本初衷是訪問第一維的3個元素,針對這個需求接奈,如何修改代碼踢涌?
??根據(jù)上表邏輯和原本需求,要訪問第一維的3個元素序宦,需要取值表達式的[ ]符號作為這個表達式的最后一個執(zhí)行的部分睁壁,或者說,需要把基址“固定住”互捌。
??或者說潘明,既然是因為優(yōu)先級導(dǎo)致的問題,那么就從改變優(yōu)先級入手,添加一對括號:

??這意味著:下面再看上表的計算過程:

??使用程序輸出驗證:

    printf("(*(a+0))[0]=%x\n",(*(a+0))[0]);
    printf("(*(a+0))[1]=%x\n",(*(a+0))[1]);
    printf("(*(a+0))[2]=%x\n",(*(a+0))[2]);
(*(a+0))[0]=1
(*(a+0))[1]=2
(*(a+0))[2]=3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秕噪,一起剝皮案震驚了整個濱河市钳降,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腌巾,老刑警劉巖遂填,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異澈蝙,居然都是意外死亡吓坚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門灯荧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來礁击,“玉大人,你說我怎么就攤上這事《吡” “怎么了链烈?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長更耻。 經(jīng)常有香客問我测垛,道長捏膨,這世上最難降的妖魔是什么秧均? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮号涯,結(jié)果婚禮上目胡,老公的妹妹穿的比我還像新娘。我一直安慰自己链快,他們只是感情好誉己,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著域蜗,像睡著了一般巨双。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霉祸,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天筑累,我揣著相機與錄音,去河邊找鬼丝蹭。 笑死慢宗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奔穿。 我是一名探鬼主播镜沽,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贱田!你這毒婦竟也來了缅茉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤男摧,失蹤者是張志新(化名)和其女友劉穎蔬墩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彩倚,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡筹我,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了帆离。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬蕊。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岸夯,到底是詐尸還是另有隱情麻献,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布猜扮,位于F島的核電站勉吻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏旅赢。R本人自食惡果不足惜齿桃,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煮盼。 院中可真熱鬧短纵,春花似錦、人聲如沸僵控。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽报破。三九已至悠就,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間充易,已是汗流浹背梗脾。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔽氨,地道東北人藐唠。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像鹉究,于是被迫代替她去往敵國和親宇立。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型自赔。 運用指針編程是C語言最主要的風(fēng)格之一妈嘹。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,440評論 3 44
  • 謹(jǐn)記 每個人心中都有一片海绍妨,自己不揚帆润脸,沒人幫您啟航,久了就是一片死海他去。人生毙驯,就是一場自己與自己的較量:讓積極打敗...
    長風(fēng)留言閱讀 7,952評論 6 10
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,516評論 1 51
  • 數(shù)組在程序設(shè)計中,為了處理方便灾测, 把具有相同類型的若干變量按有序的形式組織起來爆价。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 3,919評論 2 13
  • 第十章 指針 1. 地址指針的基本概念: 在計算機中,所有的數(shù)據(jù)都是存放在存儲器中的。一般把存儲器中的一個字節(jié)稱為...
    堅持到底v2閱讀 1,069評論 2 3