C 中關於複雜的多維陣列宣告的總結

2021-07-16 03:46:37 字數 1545 閱讀 9056

最近在讀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 中的陣列,多維陣列,交錯陣列的一些東西。有那麼一點點研究茴香豆的茴有四種寫法的感覺。先講三點顯而易見卻又值得一提的東西 第一點陣列是一種...