最近在讀c++ primer,多維陣列的宣告這裡感覺有點繞,特意記個筆記
#include "stdafx.h"
#include
using
namespace
std;
int _tmain(int argc, _tchar* argv)
;//乙個「二維陣列」,等價於乙個指向【由20個char組成的陣列】的指標,20必須填,前面的可以不填,由編譯器補全
char (*word2)[20] ; //乙個指向【由20個char組成的陣列】的指標,20必須填
char *word3[20] = ; //乙個由20個char型指標組成的陣列,20不填也可以,不填的話由編譯器補全
char **word4 ; //乙個指向char*型指標的指標
word2 = word1;
word4 = word3;
cout
<< word1[1] << endl; //word1[1]為char*型別,準確的說是char [20]型別
cout
<< word2[0] << endl; //word2[0]為char*型別,準確的說是char [20]型別
cout
<< word3[1] << endl; //word3[1]為char*型別,char*指向資料的寬度由編譯器自動補全,word3的容量為20
cout
<< word4[1] << endl; //和上面一行原理完全相同
cout
<< sizeof(word1[0]) << endl; //輸出結果為20,證明了word1 為 char[20] 型別
cout
<< sizeof(word3[0]) << endl; //輸出結果為4,證明了word3是乙個指標
/*實際上,word1和word2完全等價,word3和word4完全等價
word在宣告中,就等於(*word)。因為c++中陣列的底層實現就是指標。
c++中沒有真正的多維陣列,多維陣列實際上是「陣列的陣列」(c++ primer 第五版的原話)
[const_expr]和*都是type的一部分,即使內不填東西,也要由編譯器補全。用sizeof測試得出的結論是,測試[const_expr]類得出的位元組長度,是(base type的長度)*(const_expr)。而*類的結果是4,也就是windows下指標的位元組長度。
操作符的優先順序大於*,所以不難理解,為什麼word1和word2完全等價,word3和word4完全等價
*/system ("pause");
return
0; /*還有一點需要注意的是,儘管陣列在底層的實現方式就是指標,但是初始化乙個陣列的時候
例如 char word1[20] = ; 實際上開闢了一塊新記憶體,因此我們可以對陣列中的值進行修改。
但是 char *word3[20] = ; 這樣的宣告,則是將指標指向了字串常量,我們不能對指標所指的常量進行修改。*/
}
C 中的動態多維陣列
前言 c 的new操作符是該語言乙個非常好的語法特性,然而實際使用中卻發現new操作符有不少限制,為突出的一點便是用new操作符分配多維陣列空間時,不能讓陣列的每一維都動態可變。本文將對此提出乙個簡單直觀的解決方案,在乙個實際問題的簡化模型中加以說明,並以此釋清許多初學者對c 中new操作符與多維陣...
C 中的動態多維陣列
前言 c 的new操作符是該語言乙個非常好的語法特性,然而實際使用中卻發現new操作符有不少限制,為突出的一點便是用new操作符分配多維陣列空間時,不能讓陣列的每一維都動態可變。本文將對此提出乙個簡單直觀的解決方案,在乙個實際問題的簡化模型中加以說明,並以此釋清許多初學者對c 中new操作符與多維陣...
C 中的陣列,多維陣列和交錯陣列
想研究一些物件導向的東西,也許是 寫得還不夠多。感覺還不好,看那些教程,不是嫌太水就是太難看不懂。心情很是落寞 不過再怎樣也要堅持每天發一篇部落格。這篇來說一下c 中的陣列,多維陣列,交錯陣列的一些東西。有那麼一點點研究茴香豆的茴有四種寫法的感覺。先講三點顯而易見卻又值得一提的東西 第一點陣列是一種...