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