概念:同一型別的元素的集合體。
注:這裡的型別不僅僅指c語言中的基本型別如int flaoat char 之類的,還包括很多構造型別,如指標,結構體,陣列等。
對陣列的基本使用 :陣列只能在定義時對其整體進行初始化,不能在其它地方整體進行賦值。c語言規定陣列的下標預設從0開始。定義陣列時陣列中括號裡面的值只能是常量或常量表示式!
int arr[10]
=//正確
arr[10]
=//錯誤
陣列的初始化需要注意以下幾點:陣列 可以只給部分元素賦值。當[ }中值的個數少於元素個數時,只給前面部分元素賦值,後面的元素整型預設為0,字元預設為『0』,指標預設為null…例如:
int a[10]
=;
表示只給 a[0]~a[4] 5個元素賦值,而後面 5 個元素自動初始化為 0。
當賦值的元素少於陣列總體元素的時候,剩餘的元素自動初始化為 0:
對於short、int、long,就是整數 0;
對於char,就是字元 『\0』;
對於float、double,就是小數 0.0。
如果給陣列的全部元素賦值可以省略陣列的大小,陣列預設的大小為陣列元素的個數的大小。
int arr=
;int arr[5]
=;//兩者是等價的
利用for迴圈對陣列進行賦值,及對陣列進行遍歷:
for
(i =
0; i <
10; i++
)for
(i =
0; i <
10; i++
)printf
("\n"
);
多維陣列
如果某個陣列的維數不止乙個,它就被稱為多維陣列,其中一維的維數可以省略不寫,原因後面介紹
因為記憶體是線性結構,因此不論是一維陣列還是多維陣列,都可以將它們看做一維陣列來對待。
如:
int arr[3]
[4]=
;
這是建立了乙個包含12個整型元素的二維陣列,它雖然看著好像 三行四列。但其實它在記憶體中的儲存形式其實是這樣的:
因為所有的陣列都是一維陣列,只是這個陣列裡面的元素依然是乙個陣列而已,這個陣列包含四個整型元素。你可以像操作一維陣列那樣操作它,只是它有12個元素。
陣列名幾乎每個書上都會寫陣列名是陣列首元素的位址,大多數情況下也確實如此,c語言中只有兩種情況下陣列名代表整個陣列:
int arr[10]
=;
&arr代表整個陣列的位址,這是個陣列指標。賦給整型指標就會有警告,而且它每次加1或者減1,跳過整個陣列大小的長度。
sizeof(arr),sizeof是c語言中的關鍵字,不是乙個函式,它的作用是求乙個變數或型別所佔空間的大小,以位元組為單位這個表示式的意義是陣列總的位元組數,因此我們可以這樣求乙個陣列的元素的個數
int sz=
sizeof
(arr)
/sizeof
(arr[0]
);
當陣列進行傳參時,會發生降級問題,降為指標,什麼指標呢?指向其元素型別的指標!因此整型一維陣列降為整型指標,整型二維陣列降為整型一維陣列指標,字串陣列降為二級字元指標…
如何證明它會發生降級問題呢?
void
fun(
char arr[10]
)
這個值得結果在32位平台下將是4,因為在32位機器上任何指標的大小都是四個位元組。
void
fun(
char arr[10]
)void
fun(
char
*arr]
)
這兩中寫法是一模一樣的,而且在第一種寫法中方括號中的10可以省略不寫。因為此處它是乙個指標,並不是乙個陣列。
為什麼要發生降級呢?
傳參的過程其實是拷貝的過程,函式裡面的變數在函式呼叫時會被分配空間,因此如果不發生降級問題的話,就得分配整個陣列大小的空間,這必然造成很大的資源浪費,因為只要我們傳參的時候再把陣列元素的個數傳進去就可以完成對陣列的所有操作!而且像結構體也最好傳乙個結構體指標!
c語言學習 陣列
我們在程式設計時往往需要儲存很多數,這個時候我們就需要陣列這個工具了 1.陣列的宣告 型別 變數名稱 元素數量 double weight 20 元素數量必須是整數 定義 是一種容器 放東西的東西 特點是 1.其中所有的元素具有相同的資料型別 2.一旦建立,不能改變大小 3.陣列中的元素在記憶體中是...
C語言學習 陣列
代表c語言提高端段筆記哈哈 陣列加強了資料處理能力 即在記憶體中開一段連續的空間 注意從a 0 開始 include int main sum n printf d n sum for n 0 n 第乙個陣列演算法 一般計數器都用0為初值加 號聯動的原因也是因為陣列標號從0開始 陣列是有型別屬性的 ...
C語言學習總結
1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...