C語言中文網 目錄

一維字符數組的定義、初始化及引用,C語言一維字符數組詳解

字符數組通常用于存儲和處理字符串,在 C 語言中,一般以空字符 '\0' (ASCII 值為 0)作為字符串結束的標志。

一維字符數組一般用于存儲和表示一個字符串,二維字符數組一般用于存儲和表示多個字符串,其每一行均可表示一個字符串。

一維字符教組的定義及初始化

一維字符數組的定義格式為:

char 數組名[數組大小];

例如:
char c[10];
該語句定義了一個一維字符數組 c,大小為 10,即占 10 個字符變量空間,最大可存儲長度為 9 的字符串(第 10 個字符為 '0')。由于沒有顯式給每個字符變量賦值,故每個字符變量為隨機值。

可以采用單個字符逐個賦值的方式初始化,也可以使用字符串初始化的方式。

采用逐個字符賦值的方式

1) 當字符個數少于數組空間大小時,例如:
char c[8] = {'h','e','l','l','o',};//始值個數5小于數組空間個數8
該語句定義了含 8 個字符變量的一維字符數組,前 5 個字符變量分別顯式初始化為 'h','e','l','l','o' 等 5 個字符,后 3 個字符變量為空字符 '\0'。其存儲形式如下。


當字符數組中含有字符串結束字符 '\0' 時,可以使用 printf 函數及格式控制符 %s,輸出該字符數組中的字符串,如下所示。
printf ("%s”,c); //數組名 c 為首字符 'h' 的地址或者為 &c[0]
注意:使用 printf 函數及格式控制符 %s,輸出一個字符串時,輸出列表中一定為某個字符的地址,且從該字符開始的串一定有結束標志 '\0'。該語句的功能是:從輸出列表中的該地址開始,到第一次遇到 '\0' 為止,這之間的字符全部輸出。

通常一維數組初始化時,其第一維大小可以省略,例如:
char c[]={'h','e','l','l','o'};
對應的數組存儲形式如下所示。


由于該數組中不存在 '\0' 字符,故不能使用 printf("%s",c); 輸出。
char c[8] = {'h','e','l','l','o'};
不等價于
char c[]={'h','e','l','l','o'};

2) 當字符個數等于數組空間大小時,例如:
char c[5]={'h','e','l','l','o'};//初值個數5等于數組大小5
執行該初始化語句后,數組的存儲形式如下所示。


 
char c[5]={'h','e','l','l','o'};
等價于
char c[]={'h','e','l','l','o'};
由于該字符數組中不包含字符串結束標志 '\0',故不能使用 printf("%s",c); 輸出其中的字符串。輸出結果中一般含有隨機亂碼。

這種情況一般采用循環語句逐個輸出該數組中的每個字符。
int i;
for(i=0;i<5;i++) //循環次數為字符個數或數組大小
    printf ("%c",c[i]);//格式控制符為%c,輸出列表中為字符變量c[i]

3) 當字符個數多于空間大小時,編譯時報錯。例如:
char c[4] = {'h','e','l','l','o'}; //錯誤。初值個數5大于數組大小4

采用字符串初始化的方式

在 C 語言中,字符串一般是指含有字符串結束符 '\0' 的若干個字符的集合。而使用雙引號括起來的字符串常量,默認隱含字符串結束符 '\0'。例如:
char c[12] = {"C program"}; //注意該數組大小應足夠大
用字符串對字符數組初始化時,一般大括號可以去掉,即:
char c[12]="C program";
該初始化語句與以下三條語句均是等價的。
char c[12]= {'C',' ','p','r','o','g','r','a','m','\0','\0','\0'};
或者:
char c[12] = {'C',' ','p','r','o','g','r','a','m','\0'};
或者:
char c[12] = {'C',' ','p','r','o','g','r','a','m'};
以上等價初始化語句有一個共同特點:數組的大小均為指定值 12。

其數組存儲形式均如下所示。


采用字符串對字符數組進行初始化時,一般省略一維數組空間的大小,即:
char c[]="C program";
該數組中除了存儲字符串中的 9 個有效字符外,還自動在字符串的結尾存儲 '\0' 字符。即該數組的大小為 10。其存儲形式如下所示。


為節省空間及書寫方便,當用字符串對字符數組初始化時,一般均省略其一維的大小。

一維字符數組的引用

字符數組中的每一個元素都是一個字符,可以使用下標的形式來訪問數組中的每一個字符。

例如
char c[]="abcd";
定義了一個一維字符數組 c,用字符串常量對其初始化,該數組大小為 5,前 4 個元素的值分別為 'a'、'b'、'c'、'd',第 5 個元素的值為 '\0'。其存儲形式如下所示。


 
可以使用 c[i] 引用該數組中的每個元素,例如:
c[2]='f'; //把'f'賦給元素c[2]
scanf("%c",&c[3]); //輸入一個字符,保存到元素c[3]對應的地址空間中
printf("%c",c[1]); //輸出元素c[1]中的字符值
如果每次輸出一個字符,可使用循環語句輸出字符數組中保存的字符串,參考代碼如下。
int i;
for(i=0;c[i]!='\0';i++) //當前i號位置的字符變量只要不是結束符就輸出
    printf("%c",c[i]);

一維字符教組的應用舉例

C 語言中的字符串總是以 '\0' 作為結束標志,所以字符串的長度指的是從字符串的首字符開始,到第一次遇到 '\0' 為止,這之間所包含的有效字符的個數,結束符不計算在字符串長度內。

如字符串”abcd”,C 語言中字符串最后一個有效字符后隱含 '\0' 字符,故該字符串長度為 4。

【例 1】編寫實現求一個字符串長度的程序。

分析:把字符串保存在一維字符數組中,其長度用 len 表示,初始為 0。算法為:從該數組的首元素(0 號位置)開始,只要當前元素不為 '\0',len 加 1,直到遇到 '\0' 為止,此時 len 的值即為該字符串的長度。

實現代碼:
#include<stdio.h>
int main (void)
{
    char str[]="A good book is a good friend!";
    int i, len=0; //len必須初始化為0
    for(i=0;str[i]!='\0';i++)
        len++;
    printf ("The length is: %d\n",len);
    return 0;
}
運行結果為:
The length is: 29

【補充】該程序循環部分也可以使用 while 循環,如下所示:
i=0;
while(str[i]!='\0')
{
    len++;
    i++;
}

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo