想當程序猿,那還不快來?C語言編程新手入門基礎:字符數(shù)組與字符串

? ? ? ? 在本節(jié)中我們來學習關于字符數(shù)組和字符串的相關知識。我們知道定義一個數(shù)組時需要為其指定相應的變量類型。也就是說,定義了數(shù)組的類型之后這個數(shù)組中的所有變量就都是相同的類型?,F(xiàn)在我們就來定義一個字符弄型的數(shù)組,如下:

char hello[5] = {'H','e','l','l','o'};

? ? ? ? 這樣我們就定義了一個字符型的數(shù)組,對于數(shù)組型的變量這樣定義是沒有問題的,但有兩個方面的不足:

1·定義的過程比較麻煩,在數(shù)組變量初始化時需要逐個寫出每一個字符,并在這每一個字符的兩端加上一對單引號。

2.在顯示字符數(shù)組時,我們通常希望能夠讓其一次性的顯示出來,而不是通過循環(huán)數(shù)組的方式逐個顯示這些字符。

? ? ? ? 例如上面定義的數(shù)組我們想要用printf將其顯示出來我們則需要通過循環(huán)的方式:

char hello[5] = {'H','e','l','l','o'};

for (int i = 0; i < 5; i++)

{

printf("%c", hello[i]);

}

Hello

? ? ? ? 其實,在C語言中支持直接定義字符串的方式來為定義字符數(shù)組,例如:

char hello[6] = "Hello";

printf("%s", hello);

Hello

? ? ? ? 注意,我們在定義這個數(shù)組時,指定數(shù)組的大小為6,也就是說需要申請6個字節(jié)的存儲空間,而在等號右側的雙引號中我們卻只書寫了5個字符。這并不是筆誤,C語言規(guī)定當使用雙引號定義字符串時以'\0'作為這個字符串的結束標志符,也就是說這個字符串一共有6個字符,分別是'H'、'e'、'l'、'l'、'o'、'\0'。關于\0讀者只需要知道這是一個特殊的字符即可,它表示字符串的結束,它的值為0。這樣我們就可以通過printf函數(shù)將這個字符串直接打印出來。需要注意的是,當使用printf來顯示字符串時,我們要確保這個字符串變量中最后一個結束字符為\0,如果結束字符不是\0則printf在顯示這個字符串時,就不知道顯示到何處結束,例如

char hello[5] = "Hello";

printf("%s", hello);

Hello#@($0948#."

? ? ? ? 也就是說,我們雖然定義了一個字符串,但只定義了5個字符的長度,而使用雙引號為其初始化時,這個字符串的實際大小應該是6因為要追加一個\0,但我們在定義數(shù)組大小時只指定其大小是5所以這個數(shù)組中的中只有5個元素分別是'H'、'e'、'l'、'l'、'o'。而在'o'之后并沒有'\0',所以在printf顯示這個字符串時,顯示 Hello之后,并不知道何時結束,所以就會繼續(xù)顯示,直到遇到一個'\0'為止,于是我們程序就出現(xiàn)了非預期的結果。這樣的程序并不是我們提倡的,我們在定義字符串時一定要為其多分配一個字符的長度,以便存放字符串的結束符'\0'。當然,使用雙引號定義的字符串可以像使用普通數(shù)組一樣使用其數(shù)組元素例如ABC運行結果可以看到直接顯示字符串和循環(huán)顯示字符數(shù)組中的元素的效果是一樣的。

char str[6] = "Hello";

printf("%s\n", str);

for (int i = 0; i < sizeof(str); i++)

{

? ? printf("%c", str[i]);

}

printf("\n");

Hello

Hello

? ? ? ? 在這里我們使用了另一個重要函數(shù)sizeof(),它的作用是可以計算出某一個變量或類型的大小,就是占用的內(nèi)存字節(jié)數(shù),例如:

char ch;

short sh;

int i;

printf("%d %d %d %d %d\n",?

? ? ? ? sizeof(ch),?

? ? ? ? sizeof(sh),?

? ? ? ? sizeof(i),?

? ? ? ? sizeof(long),?

? ? ? ? sizeof(long long));

1 2 4 8 8

? ? ? ? 請注意,long類型的變量在不同的操作系統(tǒng)下占用字節(jié)數(shù)可能不同,請參數(shù)參見《變量大小》。另外在使用sizeof來計算數(shù)組大小時,計算的是數(shù)組一共占用內(nèi)存的字節(jié)數(shù),而不是數(shù)組的元素元素的個數(shù),例如:

int array[4];

printf("%d\n", sizeof(array)); ??上面例子的結果是16而不是4。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C語言是面向過程的,而C++是面向?qū)ο蟮?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??C和C++的區(qū)別:

C是一個結構化語言,它的重點在于算法和數(shù)據(jù)結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或?qū)崿F(xiàn)過程(事務)控制)。

C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務)控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經(jīng)被融入到C++之中 ”。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經(jīng)被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設計的基礎,好的設計如果沒有好的算法,一樣不行。而且,“C加上好的設計”也能寫出非常好的東西。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容