1. 程式人生 > >C語言陣列

C語言陣列

一、一維陣列

1、陣列定義後,系統將給其分配一定大小的記憶體單元,其所佔記憶體單元的大小與陣列元素的型別和陣列的長度有關。 2、陣列中每個陣列元素的型別均相同,它們佔用記憶體中連續的儲存單元,其中第一個陣列元素的地址是整個陣列所佔記憶體塊的低地址,也是陣列所佔記憶體塊的首地址,最後一個數組元素的地址是整個陣列所佔記憶體塊的高地址(末地址)。 陣列所佔記憶體單元的位元組數 = 陣列大小 × sizeof(陣列元素型別)

一維陣列的賦值

1、在定義陣列時,如果沒有為陣列變數賦初值,那麼就不能省略陣列的大小。而且陣列不初始化,其陣列元素為隨機值。

int a[5]={1,2,3,4,5};  合法
int
a[5]={1,2,3, }; 合法 int a[]={1,2,3,4,5}; 合法,常考,後面決定前面的大小!

2、一維陣列的定義;

int a[5];注意這個地方有一個重要考點,定義時陣列的個數不是變數一定是常量。
int a[5]                  合法,最正常的陣列
int a[1+1]                合法,個數是常量2,是個算術表示式
int a[1/2+4]              合法,同樣是算術表示式
int x=5,int a[x];         不合法,因為個數是x,是個變數,非法的,
define P 5   
int a[
P] 合法,define 後的的P是符號常量,只是長得像變數

3、使用迴圈語句來逐一賦值 4、函式賦值 1)使用memset函式來賦值 功能:就是將s為首地址的一片連續的n個位元組記憶體單元都賦值為ch。這種方法是適合於位元組型陣列的整體賦值,或對非位元組型陣列進行清0。 2) 使用memcpy函式實現陣列間的賦值 將s為首地址的一片連續的n個位元組記憶體單元的值拷貝到以d為首地址的一片連續的記憶體單元中 。 在使用memset和memcpy函式時,源程式中要包含標頭檔案“string.h”。

二、二維陣列

1、二維陣列的初始化

int a[2][3]={1,
2,3,4,5,6}; 合法,很標準的二維的賦值。 int a[2][3]={1,2,3,4,5, }; 合法,後面一個預設為0int a[2][3]={{1,2,3,} {4,5,6}}; 合法,每行三個。 int a[2][3]={{1,2,}{3,4,5}}; 合法,第一行最後一個預設為0int a[2][3]={1,2,3,4,5,6,7}; 不合法,賦值的個數多餘陣列的個數了。 int a[][3]={1,2,3,4,5,6}; 不合法,不可以預設行的個數。 int a[2][]={1,2,3,4,5,6}; 合法,可以預設列的個數。

三、字串與陣列

字串是一種以‘\0’結尾的字元陣列

char str[]=”china”;
char str[]={‘c’,’h’,’i’,’n’,’a’,’\0};
char str[]={“china”};//陣列大小也為6
不等價於 char str[]={c’,’h’,’i’,’n’,’a’} ;//陣列大小為5,不是字串沒有結尾標誌。
char str[10]=”china”;
等價於char str[10]={c’,’h’,’i’,’n’,’a’} ;

C語言中沒有字串變數,所以用陣列和指標存放字串:

1char   ch[10]={“abcdefgh”};2char   ch[10]=“abcdefgh”;3char   ch[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’};4char   *p=“abcdefgh”;5char   *p;  p=“abcdefgh”;6char   ch[10];  ch=“abcdefgh”;                錯了!陣列名不可以賦值!
7char   *p={“abcdefgh”};                       錯了!不能夠出現大括號!

字串的輸入 在這裡插入圖片描述 字串的輸出 puts() printf()

字串的長度 strlen(字串的地址)//string.h