鍍金池/ 問答/C++/ 《C++ Primer Plus》中關(guān)于數(shù)組的地址,有個(gè)不懂的問題

《C++ Primer Plus》中關(guān)于數(shù)組的地址,有個(gè)不懂的問題

在聲明語句short tell[10];中,tell指向數(shù)組的首個(gè)元素,表示一個(gè)2字節(jié)內(nèi)存塊的地址,而&tell指向整個(gè)數(shù)組,表示一個(gè)20字節(jié)內(nèi)存塊的地址。到目前我是理解的,但后面有幾個(gè)不理解的地方請(qǐng)大佬們指教:

  1. 書中說,表達(dá)式tell+1會(huì)將tell的值增加2,表達(dá)式&tell+2會(huì)將&tell的值增加20。不理解&tell+2為什么會(huì)將&tell的值增加20?&tell不是代表整個(gè)數(shù)組的地址嗎,那&tell+2后&tell的值應(yīng)該增加40才對(duì)啊,如果是&tell+1 其值才會(huì)增加20吧?
  2. 可以把 int * 理解為指向int的指針類型;但 short (*)[20] 該怎么理解?
回答
編輯回答
青黛色

書上也許有錯(cuò)誤的地方。你理解也有不準(zhǔn)確的地方。其實(shí)你都可以自己實(shí)驗(yàn)得到。

tell單獨(dú)用,指的是整個(gè)數(shù)組。但放入一些表達(dá)式中時(shí),會(huì)被隱式轉(zhuǎn)換為第一個(gè)元素的指針。

cout << sizeof(tell) << endl; // 輸出20,即整個(gè)數(shù)組的大小
cout << sizeof(tell + 1) << endl; // 輸出4或8,即一個(gè)指針的大?。?2位或64位的指針大小不同)
cout << tell << endl; // 輸出一個(gè)地址
cout << tell + 1 << endl; // 比上一個(gè)地址大2,即1個(gè)short的大小

&tell沒有懸念,指的是指向整個(gè)數(shù)組的指針。

cout << &tell << endl; // 輸出一個(gè)地址
cout << &tell + 2 << endl; // 比上一個(gè)地址大40

至于short (*)[20],沒見過這樣的寫法。

2017年2月28日 08:06
編輯回答
悶油瓶

補(bǔ)充一下樓上的答案
short (*)[20] 就是 short [20]的指針,是一個(gè)數(shù)組指針

2018年8月1日 08:14