如何給陣列中的元素賦值

2021-06-06 22:58:06 字數 2464 閱讀 8331

如果把單個變數看成是「遊兵散勇」的話,那麼陣列對應的是「集團」。集團的「兵」就是我們前面說的陣列的元素。這些「兵」不再有單獨的名字,而是統一使用編號來區別,這個編號,我們稱為「下標」。

在和陣列打交道時,我們需要分清:是對整個陣列操作,還是對陣列中的單個元素進行操作。

1. 在定義陣列時初始化。

普通變數可以在定義時同時賦初值:

int a = 100;

也可以在定義以後才賦值:

int a;

a = 100;

對於陣列變數,則只能在定義時,對整個陣列賦初值:

資料型別 陣列變數名[個數] = ;

即,將初值用一對 {} ( 花括號 )括起來,相鄰的值之間用逗號分隔。

比如:int arr[10] = ;

上面定義一了個陣列 arr,共10個元素。初始值為從9到0。即,執行上面**以後,arr[0]值為10,arr[1]值為9……arr[9]值為0。

在初始化賦值是時,注意所給值的個數不能超過陣列的大小,比如:

int arr[10] = ;  //錯誤!越界了

你定義了陣列為10個元素,可是你卻賦給它11個值,這稱為陣列越界:你在賓館裡預定了10間房,你卻讓11個人去住,多出的那個人擠在**呢?編譯器遇上這類問題時,很明智地停了下來。

不過,你可以給它少於定義個數的初值

int arr[10] = ;               //允許

你定義了陣列為10個元素,但你可以給它少於10個的初始值。那些沒有得到初始值的元素值是多少呢?對於全域性變數來說,將被編譯器初始化為0,對於區域性變數而言,則是未定義的值(不可**的值)。如果只定義陣列,沒有對其進行任何初始化,同樣適於本情況。所有元素的初值均依本陣列是全域性或區域性變數而定,為0或未定義值。

可以跳過一兩個元素不初始化嗎?如:

int arr[10] =  ;  //跳過中間的某些元素,c:ok;c++: error。

因為我們主要學習c++,所以認為跳過陣列中某些元素的初始化賦值是錯誤的

也就是說,你盡可以先預定下多個房間,然後先只派部分人去住。不過c說:允許你們跳著房號住,而c++則要求依次住下,把空房留在後面。

你還可以不指定陣列元素個數,直接通過對其初始化來讓編譯器得到它的實際個數:

int arr = ;  //元素個數為: 3

即,在未指定義大小時,則初始值的個數就是陣列元素的個數

不過,你不能既不指定陣列元素個數,也不進行初始化

int arr;   //error, 到底是幾個元素?

這也沒有什麼不好理解的,去幾個人,就開幾個房間。讓賓館老闆自已去數人頭,我們不必非得自已報人數——前提是,房客乙個乙個的都得事先現身。

2 .在定義之後為元素賦值

很多時候,我們無法在定義陣列的同時就知道陣列中各元素的值,所以,這時需要在定義以後各陣列中的各個元素賦值。記住,此時只能對單個元素進行直接操作。這和普通變數不一樣,下面的**是錯誤的:

int arr[5];

arr[5] = ; //錯,在編譯器看來,arr[5]是陣列arr的第6個元素。

//或arr = ;   //錯,仍然不行。

這一點和普通變數不一樣。也就是說,對陣列整體的初始化,只能在定義時實行。

大都數情況,我們這樣改變陣列中某個元素的值:

int arr[5];

arr[0] = 95; 

arr[1] = 89;

arr[2] = 100;

前面關於成績管理的例子中,已經有過如何改變陣列元素值的**:cin >> cj[i]; 這一句將使用者輸入的成績賦給陣列cj中的第i個元素(i從0計起)。

兩個陣列可以相互賦值嗎?答案也是不行:

int arr1[5] = ;

int arr2[5];

arr2 = arr2; //不行!整個陣列之間不能直接相互賦值。

你可能很不理解為什麼上面的**會出錯,不過在學習後面有關指標及記憶體位址的更多知識以後,你會明白。現在我們只能告訴你,以我們的所學,可以方便地用乙個迴圈來 實現將乙個陣列內的值全部賦值給另乙個陣列,這也稱為陣列間的拷貝。

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

arr2[i] = arr1[i]; //正確,陣列元素之間可以相互賦值。

當然,這樣做可一定要注意:當兩個陣列的元素個數不一致時,不要越界訪問:

int arr1[5] = ;

int arr2[6];

for(int i = 0;i<6;i++)  // i 從 0 到 5

arr2[i] = arr1[i];

arr2有6個元素,而arr1只有5個。當迴圈執行到 i為5時,訪問arr1[5]將造成越界。

(越界可以直觀地理解為「越出邊界「,即越出陣列的邊界,訪問到了陣列以外的記憶體,其內容將是未知的。)

如何給給字元陣列賦值

要說c語言中最讓我覺得棘手的,就是字元陣列的,c語言中沒有字串這個型別,字串只能存放在字元型陣列中。那麼,我們先來看看如何給乙個一維陣列賦值 1 定義的時候直接賦值 char arr 10 這種寫法也可以直接省略花括號,直接寫成 char arr 10 kitty 2 初始化列表,把各個字元依次賦給...

如何給這些textbox中賦值

我動態生成了100個textbox,然後,將陣列中的100個字元分別放到每個textbox中,如何賦值到裡面呢?生成動態textbox的 如下 void textbox int c 1 for int a 0 a 10 a 生成的列數 賦值的陣列 如下 private void receiveedi...

php陣列批量賦值 php給陣列賦值的例項方法

陣列就是乙個鍵值對組成的語言結構,鍵類似於酒店的房間號,值類似於酒店房間裡儲存的東西。如果你去某個酒店住店,服務員會告訴你房間號是多少,具體房間裡有儲存了什麼,那就需要根據房間號進到房間裡才知道了。設定某個變數為乙個空陣列 arr array php有兩種陣列 索引陣列 關聯陣列。索引和關聯兩個詞都...