c 陣列定義及初始化

2022-07-16 08:30:14 字數 1872 閱讀 6959

c ++提供了一種資料結構,即陣列,該陣列儲存乙個固定大小的由相同型別元素構成的順序集合。 陣列中的元素儲存在乙個連續記憶體位置中,元素可通過陣列索引訪問, 最低位址對應於第乙個元素,最高位址對應於最後乙個元素。

例如上述宣告方式用來定義乙個靜態陣列,靜態陣列所需記憶體大小要在編譯時就確定下來,陣列被分配在棧上. 但是在某些情況下,只能在執行時確定程式的記憶體需求。 例如,何時需要儲存空間取決於使用者輸入。 在這些情況下,程式需要動態分配記憶體,為此c ++語言將操作符new和delete整合在一起。

使用操作符new分配動態記憶體。 new之後是資料型別說明符,如果需要乙個以上的元素序列,則在括號中包含這些元素的數量。 它返回乙個指向分配的新記憶體塊開頭的指標。 其語法為:

pointer = new type

pointer = new type [number_of_elements]

舉例:

int * foo;

foo = new int [5];

在這種情況下,系統會為int型別的五個元素動態分配空間,並返回乙個指向序列第乙個元素的指標,該指標被分配給foo(乙個指標)。 因此,foo現在指向乙個有五個int型別的元素的有效記憶體塊。

在這裡,foo是乙個指標,因此,可以使用表示式foo [0]或表示式* foo(兩者都是等效的)訪問foo指向的第乙個元素。 可以使用foo [1]或*(foo + 1)來訪問第二個元素,依此類推...

靜態陣列和動態陣列最重要的區別是,靜態陣列的大小必須是乙個常量表示式,因此必須在設計程式時確定其大小,然後再執行它,而由new執行的動態記憶體分配則可以 在執行時使用任何變數值作為大小分配記憶體。因為foo是指向動態資料的指標,因此可以刪除此資料,並可以將新資料分配給該指標。

int* foo = new int[5]; // arr now points to a dynamic array of size 5

delete foo;

foo = new int[10]; // arr now points to a dynamic array of size 10

delete foo;

foo = new int(5); // arr now points to a single int, of value 5.

delete foo;

int** a = new int*[rowcount];

for(int i = 0; i < rowcount; ++i)

a[i] = new int[colcount];

靜態陣列和動態陣列的區別

1、靜態陣列的大小是在編譯期間就確定,並且分配的,其內存在使用結束後由計算機自動釋放,效率高;動態陣列是在程式執行時,由程式設計師根據實際需要從堆記憶體中動態申請的,使用結束後由程式設計師進行釋放,效率低。

2、對靜態陣列進行sizeof運算時,結果是整個陣列的大小,而對動態陣列進行sizeof運算時,因為位址位數為4位元組,所以結果為常數4.

3、從定址的角度來說,靜態陣列採用的是直接定址,而動態陣列都是兩次定址,這和動態陣列本身實現是有關係的。靜態陣列的變數本身就是陣列第乙個元素的位址。動態陣列的變數存放的是一根指向到申請空間的首址指標。int arr[size]arr本身就是乙個記憶體位址,而int *foo中foo是指標,指向了乙個位址。

C 陣列初始化及定義

一 一維陣列 靜態 int array 100 定義了陣列array,並未對陣列進行初始化 靜態 int array 100 定義並初始化了陣列array 動態 int array new int 100 delete array 分配了長度為100的陣列array 動態 int array new...

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。在自由儲存區中建立的陣列物件是沒有名字的,只能通...