如果把單個變數看成是「遊兵散勇」的話,那麼陣列對應的是「集團」。集團的「兵」就是我們前面說的陣列的元素。這些「兵」不再有單獨的名字,而是統一使用編號來區別,這個編號,我們稱為「下標」。
在和陣列打交道時,我們需要分清:是對整個陣列操作,還是對陣列中的單個元素進行操作。
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有兩種陣列 索引陣列 關聯陣列。索引和關聯兩個詞都...