溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

利用c++ 怎么對一個(gè)數(shù)組進(jìn)行初始化

發(fā)布時(shí)間:2020-12-10 15:43:40 來源:億速云 閱讀:522 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)利用c++ 怎么對一個(gè)數(shù)組進(jìn)行初始化,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

C ++提供了一種數(shù)據(jù)結(jié)構(gòu),即數(shù)組,該數(shù)組存儲(chǔ)一個(gè)固定大小的由相同類型元素構(gòu)成的順序集合。

數(shù)組中的元素存儲(chǔ)在一個(gè)連續(xù)內(nèi)存位置中,元素可通過數(shù)組索引訪問, 最低地址對應(yīng)于第一個(gè)元素,最高地址對應(yīng)于最后一個(gè)元素。

聲明數(shù)組

例如

聲明固定長度的數(shù)組:

const int Size = 5;
int arr[Size] = {3, 6, 9, 12, 15};
arr[3] = 42;

注意:方括號[]中的內(nèi)容(表示數(shù)組中元素的數(shù)量)必須是一個(gè)常量表達(dá)式,因?yàn)閿?shù)組是靜態(tài)內(nèi)存塊,必須在編譯時(shí)確定大小,然后程序才能運(yùn)行。

初始化數(shù)組

int arr[] = { 10, 20, 30, 40 }

聲明固定長度的數(shù)組同時(shí)初始化

const int Size = 5;

int arr[Size] = { 10, 20, 30, 40 }

上述聲明方式用來定義一個(gè)靜態(tài)數(shù)組,靜態(tài)數(shù)組所需內(nèi)存大小要在編譯時(shí)就確定下來,數(shù)組被分配在棧上. 但是在某些情況下,只能在運(yùn)行時(shí)確定程序的內(nèi)存需求。 例如,何時(shí)需要存儲(chǔ)空間取決于用戶輸入。 在這些情況下,程序需要?jiǎng)討B(tài)分配內(nèi)存,為此C ++語言將操作符new和delete集成在一起。

動(dòng)態(tài)數(shù)組

使用操作符new分配動(dòng)態(tài)內(nèi)存。 new之后是數(shù)據(jù)類型說明符,如果需要一個(gè)以上的元素序列,則在括號[]中包含這些元素的數(shù)量。 它返回一個(gè)指向分配的新內(nèi)存塊開頭的指針。 其語法為:

pointer = new type

pointer = new type [number_of_elements]

舉例:

int * foo;

foo = new int [5];

在這種情況下,系統(tǒng)會(huì)為int類型的五個(gè)元素動(dòng)態(tài)分配空間,并返回一個(gè)指向序列第一個(gè)元素的指針,該指針被分配給foo(一個(gè)指針)。 因此,foo現(xiàn)在指向一個(gè)有五個(gè)int類型的元素的有效內(nèi)存塊。

利用c++ 怎么對一個(gè)數(shù)組進(jìn)行初始化

在這里,foo是一個(gè)指針,因此,可以使用表達(dá)式foo [0]或表達(dá)式* foo(兩者都是等效的)訪問foo指向的第一個(gè)元素。 可以使用foo [1]或*(foo + 1)來訪問第二個(gè)元素,依此類推...

靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組最重要的區(qū)別是,靜態(tài)數(shù)組的大小必須是一個(gè)常量表達(dá)式,因此必須在設(shè)計(jì)程序時(shí)確定其大小,然后再運(yùn)行它,而由new執(zhí)行的動(dòng)態(tài)內(nèi)存分配則可以 在運(yùn)行時(shí)使用任何變量值作為大小分配內(nèi)存。因?yàn)閒oo是指向動(dòng)態(tài)數(shù)據(jù)的指針,因此可以刪除此數(shù)據(jù),并可以將新數(shù)據(jù)分配給該指針。

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;

生成一個(gè)二維動(dòng)態(tài)數(shù)組

int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
  a[i] = new int[colCount];

總結(jié):

靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組的區(qū)別

1、靜態(tài)數(shù)組的大小是在編譯期間就確定,并且分配的,其內(nèi)存在使用結(jié)束后由計(jì)算機(jī)自動(dòng)釋放,效率高;動(dòng)態(tài)數(shù)組是在程序運(yùn)行時(shí),由程序員根據(jù)實(shí)際需要從堆內(nèi)存中動(dòng)態(tài)申請的,使用結(jié)束后由程序員進(jìn)行釋放,效率低。

2、對靜態(tài)數(shù)組進(jìn)行sizeof運(yùn)算時(shí),結(jié)果是整個(gè)數(shù)組的大小,而對動(dòng)態(tài)數(shù)組進(jìn)行sizeof運(yùn)算時(shí),因?yàn)榈刂肺粩?shù)為4字節(jié),所以結(jié)果為常數(shù)4.

3、從尋址的角度來說,靜態(tài)數(shù)組采用的是直接尋址,而動(dòng)態(tài)數(shù)組都是兩次尋址,這和動(dòng)態(tài)數(shù)組本身實(shí)現(xiàn)是有關(guān)系的。靜態(tài)數(shù)組的變量本身就是數(shù)組第一個(gè)元素的地址。動(dòng)態(tài)數(shù)組的變量存放的是一根指向到申請空間的首址指針。int arr[Size] 中arr本身就是一個(gè)內(nèi)存地址,而int *foo中foo是指針,指向了一個(gè)地址。

補(bǔ)充知識(shí):c++、c中數(shù)組初始化默認(rèn)值如何為0

1、做全局變量

int sum[1000006];//初始化設(shè)默認(rèn)值為0

2、做局部變量

默認(rèn)值只能設(shè)為0,且只有在初始化時(shí),才能設(shè)為0(sum[100]={0};這么寫就是錯(cuò)的);

如果設(shè)為1,則只是sum[0]是1,其他默認(rèn)全為0;

int sum[100]={0};//只能設(shè)為0

3、遍歷賦值

實(shí)際意思和循環(huán)賦值0,是一樣的,只不過這個(gè)是庫封裝好了的方法。

#include <cstring>//必須引用

memset(sum,0,sizeof(sum));

以上就是利用c++ 怎么對一個(gè)數(shù)組進(jìn)行初始化,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI