c 陣列,2維陣列

2021-09-25 06:35:14 字數 892 閱讀 8230

也就是區域性變數的一維陣列,在編譯的時候其維度必須是已知的,因此維度必須是乙個常量表示式。

int a; ok

int a=4;int b【a】 wrong!

也就是用new 搞出來的,維度可以是乙個變數

int a=4;int *b = new int 【a】ok!

int a 這是個5行4列的陣列,不過實際c++沒有多維陣列這個概念,只有陣列的陣列,也就是a是乙個陣列,它有5個元素,每個元素是個 有著4個元素的陣列。

不用說,2個維度都得是常量表示式。

只有第一維可以是個變數,別的都得是常量表示式!!!

int (* array2d)[5] = new int[n][5];    是ojbk的

但是int 【a】【b】就不行了!

在c++中,陣列可以被視為一種型別——但是,不存在『二維陣列』這種型別。二維陣列本身會被解釋成乙個一維陣列:這個陣列的元素型別為另一種一維陣列。比如int[2][3]這個二維陣列,它會被編譯器視作乙個元素型別為『int[3]』的一維陣列。並且,『int[3]』和'int[4]'會被當成不同的資料型別。

假設a, b為兩個int型變數,如果你希望這樣生成乙個二維陣列:new int[a][b],是不會得到編譯器允許的——因為你沒有指定這個陣列的元素型別。由於b的大小未知,編譯器無法確定『int[b]』到底是乙個什麼型別。所以,要用new建立乙個二維陣列,這其中有講究。

所以最好用 vector來表示二維陣列

vector> vec(a , vector(b, 1));  // a行b列,每個元素是1的二維陣列

詳細參考 ;

but 有些編譯器是支援變長陣列的,也就是維度是乙個變數,並且是很多編譯器支援,這也就是為什麼刷題的時候,int a【b】沒什麼問題的原因所在,但是vs是不支援的,至少vs2015不支援!

c語言 一維陣列與二維陣列(2)

今天覆習了陣列內容。包括一維陣列,二維陣列,字元陣列,字串等內容。形式就是int a 常量 可預設 氣泡排序 設陣列個數為n,則氣泡排序要比較n 1次 在某一次比較中。將其可以比較的最後乙個數與前面所有的數進行比較。最終將陣列全部比較,形成公升序或降序排列。include int main for ...

c語言一維陣列(2)

3.陣列引用 1 原則 通過下標引用陣列中每乙個單元資料 2 下標範圍 0 n 1 n為陣列長度 3 格式 下標必須為常量或常量表示式 4 例 int a 5 a 0 1 a 5 3 2 a a 1 3 陣列下標越界不是語法錯誤,編譯器無法檢查出來,但沒有意義 4.陣列的初始化 1 定義同時賦值 i...

c 一維陣列,二維陣列,多維陣列。

陣列就是給乙個變數定義多個字元,可以是string也可以是int。或者說是一組變數。可以更加方便的操作大量資料。陣列的定義 1 陣列裡面的內容必須是同一型別 2 資料必須有長度限制 一維陣列 一 資料型別 變數名 new 資料型別 長度 陣列定義 string a new string 這裡寫陣列包...