C 陣列初始化及定義

2021-09-07 07:32:05 字數 1499 閱讀 6544

一、一維陣列

靜態 int array[100];   定義了陣列array,並未對陣列進行初始化

靜態 int array[100] = ;  定義並初始化了陣列array

動態 int* array = new int[100];  delete array;  分配了長度為100的陣列array 

動態 int* array = new int[100](1,2);  delete array; 為長度為100的陣列array初始化前兩個元素

二、二維陣列

靜態 int array[10][10];  定義了陣列,並未初始化

靜態 int array[10][10] = , };  陣列初始化了array[0][1]=及array[0][1]=

動態 int (*array)[n] = new int[m][n]; delete array;

動態 int** array = new int*[m]; for(i) array[i] = new int[n];  for(i) delete array[i]; delete array;    多次析構

動態 int* array = new int[m][n];  delete array;      陣列按行儲存

三、多維陣列

int* array = new int[m][3][4];    只有第一維可以是變數,其他維數必須是常量,否則會報錯

delete array;       必須進行記憶體釋放,否則記憶體將洩漏

四、陣列作為函式形參傳遞

一維陣列傳遞:

void func(int* array);

void func(int array);    

二維陣列傳遞:

void func(int** array);

void func(int (*array)[n]);                  

陣列名作為函式形參時,在函式體內,其失去了本身的內涵,僅僅只是乙個指標,而且在其失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改。

五、字元陣列

char型別的陣列被常委字元陣列,在字元陣列中最後一位為轉移字元'\0'(也被成為空字元),該字元表示字串已結束。在c++中定義了string類,在visual c++中定義了cstring類。

字串中每乙個字元占用乙個位元組,再加上最後乙個空字元。如:

char array[10] = "cnblogs";

雖然只有7個位元組,但是字串長度為8個位元組。

也可以不用定義字串長度,如:

char array = "cnblogs";

六、釋放陣列記憶體

靜態分配的內存在棧裡,每進入乙個函式時都會建棧,棧裡會存放函式用到的引數、區域性變數等資訊,函式執行完後,會出棧銷毀棧,這個過程會釋放靜態分配的陣列記憶體,由系統自動完成。

動態分配的記憶體,實際在堆上,系統沒法自動幫你去釋放堆上的記憶體,需要你自己寫free或者delete來告訴作業系統需要幫你去釋放堆上哪個位置的記憶體。

c 陣列定義及初始化

c 提供了一種資料結構,即陣列,該陣列儲存乙個固定大小的由相同型別元素構成的順序集合。陣列中的元素儲存在乙個連續記憶體位置中,元素可通過陣列索引訪問,最低位址對應於第乙個元素,最高位址對應於最後乙個元素。例如上述宣告方式用來定義乙個靜態陣列,靜態陣列所需記憶體大小要在編譯時就確定下來,陣列被分配在棧...

C 陣列初始化

定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通過其位址間接地訪...

C 陣列初始化

c 陣列初始化 定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通...