zt C 二維陣列講解 二維陣列的宣告和初始化

2022-04-28 23:33:15 字數 3482 閱讀 1100

定義:

int *pia = new int[10]; //array of 10 uninitialized ints

此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。

在自由儲存區中建立的陣列物件是沒有名字的,只能通過其位址間接地訪問堆中的物件。

注意:c++使用new和delete在堆(自由儲存區)上分配和釋放動態陣列。

動態陣列初始化:

1. 元素只能初始化為元素型別的預設值,而不能像陣列變數一樣,用初始化列表為陣列元素提供各不相同的初值。

2. 對於內建資料型別元素的陣列,必須使用()來顯示指定程式執行初始化操作,否則程式不執行初始化操作:

int *pia = new int[10]; //每個元素都沒有初始化

int *pia2 = new int[10] (); //每個元素初始化為0

3.類型別元素的陣列,則無論是否使用(),都會自動呼叫其預設建構函式來初始化:

string *psa = new string[10];  //每個元素呼叫預設建構函式初始化

string *psa = new string[10](); //每個元素呼叫預設建構函式初始化

動態分配空陣列:

char *cp = new char[0];

之後,可以動態改變cp的維數。

動態釋放:

delete  pia;
典型使用示例:

const char *pc = "a very long literal string"; //處理c風格字串時使用const指標

const size_t len = strlen(pc) +1; //size_t用於陣列的大小和下標

for (size_t ix = 0; ix != 1000000; ++ix)

參考:c++ primer 學習筆記:動態陣列

1: 一維陣列初始化:

2: 標準方式一: int value[100]; //value[i]的值不定,沒有初始化

3: 標準方式二: int value[100] = ; //value[0]和value[1]的值分別為1和2,而沒有定義的value[i>1]

4: //則初始化為0

5: 指標方式: int* value = new int[n]; //未初始化

6: delete value; //一定不能忘了刪除陣列空間

7:

8: 二維陣列初始化:

9: 標準方式一: int value[9][9]; //value[i][j]的值不定,沒有初始化

10: 標準方式二: int value[9][9] = ,}; //value[0][0,1]和value[1][0]的值初始化,其他初始化為0

11: 指標方式一: int (*value)[n] = new int[m][n];

12: delete value; //n必須為常量,呼叫直觀。未初始化

13: 指標方式二: int** value = new int*[m];

14: for(i) value[i] = new int[n];

15: for(i) deletevalue[i];

16: delete value; //多次析構,儲存麻煩,未初始化

17: 指標方式三: int * value = new int[3][4]; //陣列的儲存是按行儲存的

18: delete value; //一定要進行記憶體釋放,否則會造成記憶體洩露

19:

20: 多維陣列初始化:

21: 指標方式: int * value = new int[m][3][4]; //只有第一維可以是變數,其他幾維必須都是常量,否則會報錯

22: delete value; //一定要進行記憶體釋放,否則會造成記憶體洩露

陣列初始化的大括號後面要加「;」來表示結束。

陣列訪問:

指標形式:如二維陣列value[i][j]的訪問:

*(value[i] + j) 或

(*(value + i))[j]

1: 一維陣列引數傳遞:

2: void func(int *value);

3: 或者是

4: void func(intvalue);

5:

6: 二維陣列傳遞:

7: 定義是 int **value;的傳遞

8: void func(int **value);

9: 定義是 int (*value)[n] = new int[m][n];的傳遞

10: void func(int (*value)[n]); //sizeof(p)=4,sizeof(*value)=sizeof(int)*n;

1、陣列名的內涵在於其指代實體是一種資料結構,這種資料結構就是陣列;

2、陣列名的外延在於其可以轉換為指向其指代實體的指標,而且是乙個指標常量;

3、指向陣列的指標則是另外一種變數型別,(在win32平台下,長度為4),僅僅意味著陣列存放位址。

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

多維陣列在記憶體中儲存時是按照最低維連續的格式儲存的,如二維陣列,}在記憶體中的位置是這樣順序的「1,3,2,4」,這跟matlab是有區別的,matlab是按列進行儲存的。在使用指標進行索引時很有用。

char型別的陣列被稱作字元陣列,通常用來儲存字串。字串是附加有特殊字元(串尾標誌)的字串行。串終止字元表明字串已經結束,該字元由轉義序列『\0』定義,有時被稱為空字元,占用乙個位元組,其中8位全為0。這種形式的字串通常被稱為c型字串,因為以這樣的方式定義字串是在c語言中推出的,在c++一般使用string,而mfc中則定義了cstring類。

字串中每個字元占用乙個位元組,算上最後的空字元,字串需要的位元組數要比包含的位元組數多乙個。如:

char movie_star[15] = 「marilyn monroe」;

這裡字串是14個字元,但是要定義15個字串的陣列。也可以不指定字元陣列的個數。如:

char movie_star = 「marilyn monroe」;

我們定義了乙個指標,然後給它賦予了乙個位址值,然後又不再使用,但是沒有delete,那麼當給指標賦予其他的位址值時,原來的記憶體將無法釋放,這就叫做記憶體洩露。

二維陣列 二維陣列和指標

include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...

二維陣列及二維陣列的遍歷

一 如果陣列的元素是一維陣列 則該陣列是二維陣列 如果陣列的元素是二維陣列 則該陣列是三維陣列 注意 二維陣列的長度 是陣列內一維陣列的個數 獲取二維陣列內的元素 第一步獲取該元素在哪乙個一維陣列內 第二步獲取該元素在一維陣列的那個位置 false var arr 1,2,3 var arr1 你好...

陣列 二維陣列

一組相同型別的資料組合,是一種引用型別。陣列名稱不是固定的,與其存放的資料的型別有關。如 存放int型別的資料,陣列名稱 int 存放字串資料,陣列名稱 string 存放scanner型別的資料,陣列名稱 scanner陣列中的每個資料,都是這個陣列的元素。1 宣告 元素型別 變數名 元素型別 變...