本篇內(nèi)容介紹了“c++數(shù)組初始化的方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
c++初始化數(shù)組的方法:1、先定義數(shù)組再給數(shù)組賦值,語法“數(shù)據(jù)類型 數(shù)組名[length];數(shù)組名[下標(biāo)]=值;”;2、定義數(shù)組時(shí)初始化數(shù)組,語法“數(shù)據(jù)類型 數(shù)組名[length]=[值列表]”。
本教程操作環(huán)境:windows7系統(tǒng)、C++17版本、Dell G3電腦。
有時(shí)在程序中設(shè)置變量值比輸入變量值更合適。但是,為數(shù)組的各個(gè)元素編寫單獨(dú)的賦值語句可能意味著大量的輸入,對于大型數(shù)組而言尤其如此。
例如,來看一個(gè)程序:
#include#include using namespace std; int main() { const int NUM_MONTHS = 12; int days[NUM_MONTHS]; days[0] = 31; // January days[1] = 28; // February days[2] = 31; // March days[3] = 30; // April days[4] = 31; // May days[5] = 30; // June days[6] = 31; // July days[7] = 31; // August days[8] = 30; // September days[9] = 31; // October days[10] = 30; // November days[11] = 31; // December for (int month = 0; month < NUM_MONTHS; month++) { cout << "Month "<< setw (2) << (month+1) << " has "; cout << days[month] << " days.\n"; } return 0; }
程序輸出結(jié)果:
Month 1 has 31 days. Month 2 has 28 days. Month 3 has 31 days. Month 4 has 30 days. Month 5 has 31 days. Month 6 has 30 days. Month 7 has 31 days. Month 8 has 31 days. Month 9 has 30 days. Month 10 has 31 days. Month 11 has 30 days. Month 12 has 31 days.
幸運(yùn)的是,還有一個(gè)選擇,C++ 允許在定義數(shù)組時(shí)初始化數(shù)組。通過使用初始化列表,可以在創(chuàng)建數(shù)組時(shí)輕松初始化數(shù)組的所有元素。以下語句定義 days 數(shù)組,并使用之前程序中賦值語句集所建立的相同值對其進(jìn)行初始化:
int days [NUM_MONTHS] = {31,28,31,30,31,30,31,31,30,31,30, 31};
這些值按照它們出現(xiàn)在列表中的順序存儲(chǔ)在數(shù)組元素中(第一個(gè)值 31 存儲(chǔ)在 days[0] 中,第二個(gè)值 28 存儲(chǔ)在 days [1] 中,等等)。下圖 顯示了初始化后數(shù)組的內(nèi)容。
下面程序是上邊程序的修改版。它在創(chuàng)建 days 數(shù)組時(shí)即對其進(jìn)行了初始化,而不是使用單獨(dú)的賦值語句。請注意,初始化列表分散在多行中。該程序還添加了一個(gè) string 對象數(shù)組來保存月份名稱:
#include#include #include using namespace std; int main() { const int NUM_MONTHS = 12; string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"}; int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for (int month = 0; month < NUM_MONTHS; month++) { cout << setw(9) << left << name[month] << " has "; cout << days [month] << " days. \n"; } return 0; }
程序輸出結(jié)果:
January has 31 days. February has 28 days. March has 31 days. April has 30 days. May has 31 days. June has 30 days. July has 31 days. August has 31 days. September has 30 days. october has 31 days. November has 30 days. December has 31 days.
到目前為止,已經(jīng)演示了如何使用數(shù)值填充數(shù)組,然后顯示所有的值。但是,有時(shí)候可能還需要更多功能,例如從數(shù)組中檢索一個(gè)特定的值。下面程序是上面程序的變化版本,它可以顯示用戶選擇的月份中有多少天。
#include#include #include using namespace std; int main() { const int NUM_MONTHS = 12; int choice; string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"}; int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; cout << "This program will tell you how many days are "<< "in any month.\n\n"; // Display the months for (int month = 1; month <= NUM_MONTHS; month++) cout << setw (2) << month << " " << name [month-1] << endl; cout << "\nEnter the number of the month you want: "; cin >> choice; // Use the choice the user entered to get the name of // the month and its number of days from the arrays. cout << "The month of " << name [choice-1] << " has " << days[choice-1] << " days.\n"; return 0; }
程序輸出結(jié)果為:
This program will tell you how many days are in any month. 1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 September 10 october 11 November 12 December Enter the number of the month you want: 4 The month of April has 30 days.
從數(shù)組元素1開始
真實(shí)世界中存在著大量的邏輯上以 1 開頭的事物,在給這樣的事物建立模型時(shí),很多教師會(huì)偏向于讓學(xué)生不要使用元素 0,而改為從元素 1 開始存儲(chǔ)實(shí)際數(shù)據(jù)。一年中的月份數(shù)就是一個(gè)很好的例子。在這種情況下,可以聲明 name 和 days 數(shù)組每個(gè)都有 13 個(gè)元素,并按以下方式對它們進(jìn)行初始化:
string name[NUM_MONTHS+1]={" ", "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"}; int days[NUM_MONTHS+1] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
注意數(shù)組元素 0 沒有被使用。它只是一個(gè)虛擬的值。這樣可以將一月份的名稱存儲(chǔ)在 name[1] 中,二月份的名稱將存儲(chǔ)在 name[2] 中,以此類推。同樣,1 月份的天數(shù)將保存在 days[1] 元素中,2 月份的天數(shù)將保存在 days[2] 元素中,以此類推。
如果使用上述方法定義和初始化數(shù)組,則循環(huán)應(yīng)該改寫為以下形式。它將顯示數(shù)組元素 1?12 的內(nèi)容,而不是像以前那樣顯示元素 0?11。
for (int month = 1; month <= NUM_MONTHS; month++) { cout << setw(9) << left << name[month] << " has "; cout << days[month] << " days.\n"; }
如果實(shí)際數(shù)據(jù)以元素 1 開始存儲(chǔ),那么也不需要將數(shù)組下標(biāo)加 1 來定位特定的數(shù)據(jù)。以下是列出每個(gè)月編號(hào)和名稱的語句修改:
for (int month = 1; month <= NUM_MONTHS; month++) cout << setw (2) << month << " " << name [month] << endl;
顯示用戶所選月份的天數(shù)的代碼應(yīng)修改為如下所示。
cout << "The month of " << name[choice] << " has "<< days [choice] << " days . \n";
數(shù)組部分初始化
當(dāng)一個(gè)數(shù)組被初始化時(shí),C++ 并不是必須獲得每個(gè)元素的值,也可以只初始化數(shù)組的一部分,如下所示:
int numbers[7] = {1, 2, 4, 8};
這個(gè)定義只初始化了一個(gè)7元素?cái)?shù)組中的前 4 個(gè)元素,如下圖所示。
值得一提的是,圖 2 中未被初始化的元素將全部被設(shè)置為零。這是數(shù)字?jǐn)?shù)組部分初始化時(shí)發(fā)生的情況。當(dāng)一個(gè) string 對象數(shù)組被部分初始化時(shí),未初始化的元素將全部包含空字符串,即長度為 0 的字符串。即使部分初始化的數(shù)組在局部定義,也會(huì)如此。但是,如果本地?cái)?shù)組完全未初始化,則其元素將包含“垃圾”,就像其他局部變量一樣。
下面的程序顯示了在部分初始化之后的 numbers 數(shù)組的內(nèi)容:
#includeusing namespace std; int main () { const int SIZE = 7; int numbers[SIZE] = {1, 2, 4, 8}; // Initialize the first 4 elements cout << "Here are the contents of the array: \n"; for (int index = 0; index < SIZE; index++) cout << numbers [index] << " "; cout << endl; return 0; }
程序輸出結(jié)果:
Here are the contents of the array: 1 2 4 8 0 0 0
雖然數(shù)組初始化列表的值可以比數(shù)組的元素少,但不允許有比數(shù)組元素更多的值。以下語句是非法的,因?yàn)?numbers 數(shù)組只能包含 7 個(gè)值,但初始化列表中卻包含 8 個(gè)值。
int numbers [7] = {1, 2, 4, 8, 3, 5, 7, 9}; //不合法
另外,如果留下了某個(gè)元素未初始化,那么該元素之后的所有元素都應(yīng)該保留為未初始化。C++ 不提供跳過初始化列表中元素的方法。以下是另一個(gè)非法的例子:
int numbers [7] = {1, , 4, , 3, 5, 7}; // 不合法
隱式數(shù)組大小
可以通過提供一個(gè)包含每個(gè)元素值的初始化列表來定義一個(gè)數(shù)組而不指定它的大小。C++ 會(huì)計(jì)算初始化列表中的項(xiàng)目數(shù),并為數(shù)組提供相應(yīng)數(shù)量的元素。例如,以下定義創(chuàng)建 了一個(gè)包含5個(gè)元素的數(shù)組:
double ratings [] = {1.0,1.5,2.0,2.5,3.0};
注意,如果省略大小聲明符,則必須指定一個(gè)初始化列表。否則,C++ 不知道該數(shù)組有多大。
初始化變量的新方法
到目前為止,已經(jīng)介紹過的定義和初始化常規(guī)變量的方法是使用賦值語句,示例如下:
int value = 5;
但是,我們已經(jīng)學(xué)習(xí)過使用函數(shù)、數(shù)組以及類,所以現(xiàn)在是時(shí)候來介紹另外兩種在定義變量的同時(shí)即進(jìn)行初始化的方法。
第一種新方法是使用函數(shù)符號(hào)初始化變量。它看起來就像是給一個(gè)函數(shù)傳遞參數(shù)。如果您已經(jīng)掌握了類的內(nèi)容,那么就會(huì)注意到,它也很像是在創(chuàng)建類對象時(shí)給一個(gè)構(gòu)造函數(shù)傳遞值。以下是使用函數(shù)符號(hào)定義變量 value 并初始化其值為 5 的示例語句:
int value (5);
第二種初始化變量的新方法是 C++ 11 中新引入的,使用大括號(hào)表示法。它看起來就像是剛剛上面所看到的初始化數(shù)組的方法,但是其中有兩點(diǎn)區(qū)別:
因?yàn)槌R?guī)變量只能一次保存一個(gè)值,所以通過這種方法初始化變量時(shí),大括號(hào)中只有一個(gè)值;
和數(shù)組初始化列表不一樣,通過這種方法初始化變量時(shí),在大括號(hào)前面沒有賦值運(yùn)算符(=)。
以下是使用大括號(hào)表示法定義變量 value 并初始化其值為5的示例語句。
int value{5}; //該語句僅在C++ 11或更高版本中合法
絕大多數(shù)程序員會(huì)繼續(xù)使用賦值運(yùn)算符來初始化常規(guī)變量,本書也將如此,但是,大括號(hào)表示法提供了一項(xiàng)優(yōu)點(diǎn),它會(huì)檢查用來初始化變量的值,并確保匹配變量的數(shù)據(jù)類型。例如,假設(shè) doubleVal 是一個(gè) double 類型變量,存儲(chǔ)在其中的值為 6.2。則使用賦值運(yùn)算符時(shí),可以編寫以下兩種形式的語句之一:
int valuel = 4.9; //該語句將給valuel賦值為。4 int vaule2 = doubleVal; // 該語句將給 value2 賦值為 6
在這兩種情況下,值的小數(shù)點(diǎn)部分都會(huì)被先截?cái)?,然后才賦值給被定義的變量。這雖然可能會(huì)導(dǎo)致一些問題,但 C++ 編譯器是允許的,它也會(huì)提出警告,但卻仍然能生成可執(zhí)行文件,并且可以運(yùn)行。不過,如果在這里使用的是大括號(hào)表示法,則編譯器會(huì)指出這些語句產(chǎn)生了一個(gè)錯(cuò)誤,并且不會(huì)生成可執(zhí)行文件。必須先修復(fù)該錯(cuò)誤,然后重新編譯項(xiàng)目才能運(yùn)行該程序。
“c++數(shù)組初始化的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!