c語言之一維數組

1.數組的定義

變量類型  數組名 [元素個數] = {數值1,  數值2,數值3.....}

定義的幾種形式

a. int a[5] = {1, 2,  3,  4, 5};

b. int a[] = {1, 2, 3, 4, 5}; //可以省略個數

c. int a[5] = {1}; //默認第一個爲1, 其餘的爲 0

注意:數組不能直接參加運算,數組的元素可以;eg: int a[2] = {4, 5}; int b[2] = {8, 9}; a + b 這是錯誤的。

          數組的下標是從 0 開始的 故個數爲5的數組的下標是從 0 - 4的

          注意不能越界 int a[5] = {1, 2, 3, 4, 5, 6};後面有6個元素,前面定義的個數爲5,這樣就出現越界現象,很危險


使用

數組名[數組下標];

2.字符數組

定義

char a[5] = {'a', 'p', 'p', 'l',  'e'};

char a[] = {'a', 'b', 'p', 'p', 'e'};

char a[5] = {'a'};//默認第一個a[0] = 'a' 其餘的爲'\0'

使用

數組名[數組下標];

字符串:

char a[5] = "apple";

char a[5] = "apple"; 定義的格式與 char a[5] ={'a', 'p', 'p',' l','e'};是完全等價的。

其中數組個數都爲5;

字符串格式可以用 %s輸出 ,輸出的時候遇到'\0'結束

對於 char a[5] = {'a', 'p', 'p','l', 'e'}; 使用 %s 輸出可能是錯誤的, %s 遇到 '\0'輸出結束 在輸出 a數組時可能輸出apple後沒有遇到'\0' 這樣的話會把'\0'之前的東西都輸出來 

char a[6] = {'a' ,'p', 'p', 'l', 'e' , '\0'}; 和 char a[] = "apple";是等價的

char a[] = "apple";定義之後在apple後面自動加了個'\0' 其實它在電腦上存的時候也是存的' a' ,'p', 'p', 'l', 'e' , '\0'

在使用字符數組時注意越界和結束的標誌,以防止越界的情況發生

字符串函數

字符串鏈接函數:strcat(數組1,數組2);把數組2鏈接到數組1的後面遇到\0結束 ,數組1 的長度要足夠大

字符串的複製函數:strcpy(數組1,數組2);把數組2 複製到數組1中 遇到\0結束

字符串的比較函數:strcmp(數組1, 數組2);用字符串1中的每個元素和對應位置字符串2中的元素的ASCII值相減,如果不爲零就繼續比較;如果不爲0,就返回差值;當對應的元素都是'\0'時,比較停止,返回結果0

字符串計算長度的函數:strlen(數組);遇到'\0'結束'\0'不計入長度之內  char a[] = "apple";在內存中佔到6個字節 但是用strlen(a)計算出來的卻是5 就是因爲'\0'不計入長度之內;

char佔據一個字節 short 兩個字節 int 4個字節 long 8個字節 float 4個字節 double 4-8個字節(32位機器4個字節 64位機器8個字節)

有符號char 佔據的大小爲 - 2的7次方到2的7次方 - 1;

無符號char 佔據的大小爲 0到2的8次方 - 1;

同樣 short 無符號則爲0 - 2的16次方 - 1;有符號爲 -2的15次方到 2的15次方 - 1

計算數據類型或變量所佔字節數可以用函數sizeof(數據類型 或 變量名)

例如可以使用sizeof(int); 或者是 int a = 0; sizeof(a);返回的時無符號長整形 %lu

在整型數組若不知道長度可以使用如下方法

int a[] = {1, 2, 3, 4};

sizeof(a) / sizeof(a[0]);//用整個數組所佔的字節數除以一個數據所佔的字節數 這樣便可以計算出該數組有幾個數據






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章