大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 實例解析字符串數組

實例解析字符串數組

更新時間:2020-11-05 17:44:34 來源:動力節點 瀏覽1343次

字符串數組其實算是指針數組的一類,其本身有著數組的特征,但在某些方面也和一般的數組有著區別,本文我們就來探究字符串數組的奧秘。


char* str1內存放的是字符串的指針,指向了一個地址而char str2則是在棧中開辟了50char大小的空間來存放這些字符下面的程序通過初始方式來幫助你理解兩者的不同:

int main() {

char Str1[10] = "Hello";

char Str2[10];

char Str3[10];

char Str4[10];

char Str5[10] = "World";

char* str1[5] = {Str1, Str2, Str3, Str4, Str5};

char str2[5][10] = {

"Hello",//注意寫逗號

"",

"",

"",

"World"};

str1[1] = " Goodbye";

//str2[1] = " Goodbye";//報錯:表達式必須是可修改的左值

scanf("%s", str2[1]);

printf("%s", str1[0]);

printf("%s\n", str1[4]);

printf("%s ", str2[0]);

printf("%s\n", str2[4]);

return 0;

}


字符串數組的一個應用寫一個程序。輸入一個數代表月份,輸出這個月的英語單詞。我們可以用 if else 來做也可以用 switch 來做。但是今天學習了字符串數組,我們有了更簡單的方式來完成。請看下面的程序:int main() {

char* str[12] = { "January", "February", "March", "April", "May", "June",

"July", "August", "September", "October", "November", "Decenmber",

};

int month = 0;

while (1) {

printf("input a month\n");

scanf("%d", &month);

if (month >= 1 && month <= 12)

printf("%s\n", str[month - 1]);

else

printf("invalid input\n");

}

return 0;

}


這樣寫代碼被大大縮短了。

我們知道定義一個數組時需要為其指定相應的變量類型。也就是說,定義了數組的類型之后這個數組中的所有變量就都是相同的類型。現在我們就來定義一個字符弄型的數組,如下:char hello[5] = {'H','e','l','l','o'};


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

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

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

例如上面定義的數組我們想要用printf將其顯示出來我們則需要通過循環的方式:

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

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

{

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

}

Hello

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

char hello[6] = "Hello";

printf("%s", hello);

Hello


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

printf("%s", hello);

Hello#@($0948#."


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

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

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

{

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

}

printf("\n");

Hello

Hello

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

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類型的變量在不同的操作系統下占用字節數可能不同,請參數參見《變量大小》。另外在使用sizeof來計算數組大小時,計算的是數組一共占用內存的字節數,而不是數組的元素元素的個數,例如:

int array[4];

printf("%d\n", sizeof(array));

上面例子的結果是16而不是4。


關于字符串數組的知識就介紹到這里,總的來說我們想要掌握字符串數組不僅要學好字符串,同時也要精通數組的相關知識,這些都可以在本站的Java基礎教程中學習,只有肯下功夫,鉆研透教程中的重點內容,一定能夠打好Java基礎。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 2020国产成人精品免费视频 | 国产日韩在线 | 久青草视频在线播放 | 精品免费国产一区二区女 | 国产人做人爱免费视频 | 免费香蕉成视频成人网 | japanese乱子另类 | 国产精品久久久久久久久ktv | 免费在线观看一级片 | 久久国产免费观看精品 | 人人插97| 99热在线获取最新地址 | 91精品视频在线免费观看 | 九九久久视频 | 久久综合精品国产一区二区三区无 | 91啦中文成人| 乱人伦精品一区二区 | 爱爱免费观看高清视频在线播放 | 国产精品国产三级国产an | 国内精品视频在线播放一区 | 日韩毛片在线观看 | 天天做天天欢天天爽 | 欧美日韩在线观看免费 | 天天操天天添 | 国产精品久久综合桃花网 | 99热精品免费 | 国产精品久久久久久亚洲伦理 | 国产最新网站 | 综合在线播放 | 久草精品在线观看 | 不卡国产视频 | 四虎麻豆 | 色丁香六月 | 香蕉国产人午夜视频在线观看 | 欧美一区二区在线播放 | 中文字幕一区二区三区精彩视频 | 色综合伊人色综合网亚洲欧洲 | 欧美亚洲桃花综合 | 综合久久久久6亚洲综合 | 韩国精品videosex性韩国 | 国产亚洲美女精品久久久久狼 |