CC 中sizeof函式的用法

2022-03-07 18:57:33 字數 1126 閱讀 5682

c/c++中sizeof()函式的用法            

學習c/c++有時會遇到下面的情況:

已知 char *str1="absde";

char str2="absde";

char str3[8]=;

char str4 = "0123456789";

為什麼sizeof(str1)=4

sizeof(str2)=6;

sizeof(str3)=8;

sizeof(str4)=11;呢? 

丈二和尚摸不著頭腦,接下來我們一起好好討論討論,sizeof()到底是怎麼一回事。

首先咱們說明一點,char型別變數在記憶體中佔乙個位元組,所以sizeof(char)是1,

這點咱們學c/c++的應該很好理解。 

str1是乙個指標變數,它只是指向了字串"absde"而已。

sizeof(str1)既不是字串佔的空間長度,也不是字元陣列佔的空間長度,

而是乙個字元型指標佔的空間,所以sizeof(str1)=sizeof(char*)=4(因為在c/c++中乙個指標佔4個位元組)。

str2是乙個字元型陣列。c/c++規定,對於乙個陣列,返回這個陣列佔的總空間,

所以sizeof(str2)取得的是字串"absde"佔的總空間。

"absde"中,共有a b s d e \0六個字元,

所以str2陣列的長度是6,所以sizeof(str2)=6*sizeof(char)=6。

str3已經定義成了長度是8的陣列,所以sizeof(str3)為8。

str4和str2類似,'0' '1' ... '9'加上'\0'共11個字元,所以str4佔的空間是11。

總之,對於指標,sizeof操作符返回這個指標佔的空間,一般是4個位元組;

而對於乙個陣列,sizeof返回這個陣列所有元素佔的總空間。

char*與char容易混淆,我們一定要分清,

而且char*="aaa"的寫法現在不被提倡,應予以避免。

而strlen不區分是陣列還是指標,就讀到\0為止返回長度。

而且strlen是不把\0計入字串的長度的。

為了進一步理解sizeof()、strlen()用法及兩者的區別,您不妨親自編寫幾個小程式,一試就明白了。

sizeof 函式的用法

原文章出處 sizeof 功能 計算資料空間的位元組數 1.與strlen 比較 strlen 計算字元陣列的字元數,以 0 為結束判斷,不計算為 0 的陣列元素。而sizeof計算資料 包括陣列 變數 型別 結構體等 所佔記憶體空間,用位元組數 表示,計算字串時,計算為 0 2.指標與靜態陣列的s...

C C 中sizeof的運用

通過實踐將個人對sizeof的理解寫到這裡,還望大家的指點 以下是我的實踐 include class a class b class c class d virtual public b class e public c class f virtual public b class g publi...

C C 中rand()函式的用法

一 c 中不能使用random 函式 random函式不是ansi c標準,不能在gcc,vc等編譯器下編譯通過。但在c語言中int random num 可以這樣使用,它返回的是0至num 1的乙個隨機數。可改用c 下的rand函式來實現。1 c 標準函式庫提供一隨機數生成器rand,返回0 ra...