從一維數組看sizeof和strlen
時間:2016-12-30作者:華(hua)清(qing)遠見
前幾天學習一維數組的賦值的時(shi)候遇到這樣一個問題,程序(xu)如下:
char a[]="hello"; 在分析結果之前,我們先來看下sizeof和(he)strlen的區別。 本(ben)質(zhi)上而言,sizeof是一個(ge)運算符(fu),它用類型作為參數(shu),而strlen只(zhi)(zhi)是C庫提供的(de)一個(ge)函數(shu),他用來計(ji)算以’\0’結(jie)果的(de)字(zi)符(fu)串的(de)長度,即(ji)它的(de)參數(shu)只(zhi)(zhi)能是char*。它們相同(tong)的(de)地(di)點就(jiu)只(zhi)(zhi)是返回值,都是一個(ge)size_t類型的(de)值。 其實還有其他(ta)不同的(de)地(di)方,我們來通過這個程序分析下。
1)分析第一行第二行,同樣是給數組賦值了hello,為什么結果卻不一樣。 2)sizeof是(shi)我(wo)們給字(zi)符串賦(fu)值(zhi)時(shi)系統(tong)分(fen)配給數組(zu)所用空間(jian)的(de)(de)值(zhi)。比較a和c,這個時(shi)候(hou)我(wo)們對它倆的(de)(de)賦(fu)值(zhi)其(qi)實(shi)是(shi)一樣的(de)(de),b區別于c,內存(cun)給a、c分(fen)配的(de)(de)都(dou)是(shi)6個字(zi)節(jie),而b只分(fen)配給5個字(zi)節(jie)。 3)分析第(di)一行第(di)四行,為什么同樣給a、d賦值了(le)一個字(zi)符串,用strlen求出(chu)的(de)值相同而用sizeof求出(chu)的(de)不一樣? 原因就是(shi)(shi)(shi):數(shu)(shu)組(zu)作為(wei)參數(shu)(shu)傳(chuan)給(gei)函數(shu)(shu)時傳(chuan)的(de)(de)(de)(de)(de)是(shi)(shi)(shi)指(zhi)針而不是(shi)(shi)(shi)數(shu)(shu)組(zu),傳(chuan)遞的(de)(de)(de)(de)(de)是(shi)(shi)(shi)數(shu)(shu)組(zu)的(de)(de)(de)(de)(de)首地址。sizeof(d) 結果 4 ,這個(ge)(ge)時候,d是(shi)(shi)(shi)指(zhi)向字(zi)符串常量的(de)(de)(de)(de)(de)字(zi)符指(zhi)針,sizeof 獲得的(de)(de)(de)(de)(de)是(shi)(shi)(shi)一個(ge)(ge)指(zhi)針的(de)(de)(de)(de)(de)之(zhi)所占(zhan)的(de)(de)(de)(de)(de)空間(jian),應(ying)該是(shi)(shi)(shi)長整(zheng)型的(de)(de)(de)(de)(de),所以(yi)是(shi)(shi)(shi)4。而sizeof(a)中a表示(shi)的(de)(de)(de)(de)(de)是(shi)(shi)(shi)分配的(de)(de)(de)(de)(de)數(shu)(shu)組(zu) a 所占(zhan)的(de)(de)(de)(de)(de)內存(cun)空間(jian)的(de)(de)(de)(de)(de)大(da)小,不受里(li)面存(cun)儲的(de)(de)(de)(de)(de)內容改變。 所以通常當我們來計算(suan)字符串數組的(de)(de)長度,到(dao)底用到(dao)的(de)(de)是(shi) sizeof 和 strlen ,是(shi)需要考慮的(de)(de),應注意它們的(de)(de)區別。
相關資訊
發表評論
|