問題1:sizeof(c) = ?
問題2:strlen(c) = ?
問題3:執行free(c);之後會有什麼後果?
解答1:8
解答2:3 (判斷字串a的長度,這個長度不包括"\0")
解答3:段錯誤
a 2 b 4 c 100 d 200 e 400
答案:d
段錯誤:指訪問的記憶體超出了系統所給這個程式的記憶體空間。
組合語言的程式設計是分4個段來設計的,即用來放資料的資料段ds,臨時存放資料的堆疊段ss、存放程式**的**段、存放附加資料的附加段,每一段的最大儲存空間為64kb,跳轉指令、程式呼叫指令在轉移到位址沒有超過64kb位址空間範圍的叫段內轉移,超出64kb位址空間範圍的叫段間轉移。這就是段內和段間的含義。
void func(char *str)
int main()
結果: 10 9 4 9
在c/c++裡陣列作為引數時傳遞的實際上是指向陣列第乙個元素的指標,因此sizeof(str)返回的是指標的大小,即4。所有的指標大小都是4。
下列程式在 64 位 linux 或 unix 中的結果是什麼?
結果: 10 9 8 9
不同點:
(1)sizeof是乙個運算子,它用型別作為引數,而strlen只是c庫提供的乙個函式,他用來計算以』/0』結果的字串的長度,即它的引數只能是char*。
(2)strlen的結果要在執行的時候才能計算出來,是用來計算字串的實際長度,而sizeof的結果是在編譯的時候就計算過的,是型別或變數佔記憶體的大小。 注意:sizeof計算的是型別或者變數佔記憶體的大小。
相同點:
(1)它們相同的地點就只是返回值,都是乙個size_t型別的值。
c語言中陣列與sizeof
我以前的理解是 陣列名字就是指向陣列首元素的指標,然而用sizeof 運算元組名字,把我又弄得有些疑惑了。查了查資料,終於明白了。原來,陣列名字做形參時才被當作指標。而sizeof 並不是乙個函式,而是乙個單目運算子,所以sizeof 裡寫陣列名字,返回的就是陣列佔了多少位元組。例如 char a ...
C語言中sizeof與strlen區別
sizeof 初始的分配的空間大小,期中 sizeof unsigned char 1 sizeof signed char 1 sizeof int 4 sizeof unsigned int 4 sizeof short int 2 sizeof unsigned short 2 sizeof ...
C語言中sizeof與strlen區別
一.本質區別 sizeof 和 strlen 有本質上的區別。sizeof 是c 語言的一種單目運算子,如 等,並不是函式,sizeof 的優先順序為2 級,比 等3 級運算子優先順序高,sizeof 以位元組的形式給出運算元的儲存空間的大小。而strlen 是乙個函式,是由c 語言的標準庫提供的。...