1. 程式人生 > >[C] 6 陣列

[C] 6 陣列

陣列

定義

型別符 陣列名[常量表達式]

void func(int n) {
	int a[2*n]; //合法,n的值從實參傳來
}

static int a[2*n]; //不合法,a陣列指定為static儲存方式

不進行初始化,值不可預料

一維陣列

定義

int a[10] = {0,1,2,3,4,5,6,7,8,9} //對全部陣列元素賦予初值
int a[10] = {0,1,2,3,4} //部分賦值,其他預設為0
int a[] = {1,2,3,4,5} //賦初值時,個數已定,不指定陣列長度

如果在定義數值型陣列時,指定了陣列的長度並對之初始化

,凡未被“初始化列表”指定初始化的陣列元素,系統自動初始化為0,但

  1. 字元型陣列:’\0’
  2. 指標型陣列:NULL,即空指標

二維陣列

定義

型別說明符 陣列名[常量表達式][常量表達式]

int a[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } //全賦值
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12} //全賦值
int a[3][4] = { {0,1}, {}, {2} } //其餘自動為0
int a[][4] = { {1,2,3}, {}, {0,10} } //維度的長度預設

字元陣列

定義

ASCII值為0,結束標誌符’\0’

char c[] = {"I am happy"}; //初始化,系統在最後面自動加'\0'
char c[] = "I am happy"; //初始化
char c[] = {'I', ' ', 'a',...,'y','\0'}; //等同於

輸入輸出

%c

逐個字元輸入輸出

%s

將整個字串一次輸入或輸出
%s,對字串(string)的輸入輸出

  • 輸出項是字元陣列名,遇’\0’停止輸出
  • 輸入scanf("%s",c); //c為陣列名,char c[15];
  • 分隔符:空格、回車
  • 未賦值的自動置’\0’

printf("%o",c); //用八進位制形式輸出陣列c的起始地址

字串處理函式

#include<string.h>

函式名 說明
puts(str) 輸出字串(以後’\0’結束的字元序列)
gets(str) 輸入字串,分隔符為回車
strcat(str1,str2) String catenate結果放在字元陣列1中
strcpy(str1,str2) string copy將字串2複製到字串1
strncpy(str1,str2,n) 將str2前面n個字元複製到str1,取代str1前面的N個字元,n應該<str1的長度
strcmp(str1,str2) string compare,自左至右逐個字元相比(ASCII碼)
strlen(str) string length,不包括’\n’
strlwr(str) string lowercase字串小寫
strupr(str) string uppercase字串大寫