那是很給力啊:
關於sizeof ,今天出來討論下,希望感興趣的童鞋都來一起討論。
ps: 由於某些編譯器的差異,這裡只討論vc++的情況
sizeof是c/c++下的運算子,可用於任何變數名、型別名或常量值。
sizeof有三種語法形式,如下:
1) sizeof( object ); // sizeof( 物件 );
2) sizeof( type_name ); // sizeof( 型別 );
3) sizeof object; // sizeof 物件;
今天主要討論指標和陣列的使用 具體其他的 可以自己查閱msdn
指標變數的sizeof
指標記錄了另乙個物件的位址。既然是來存放位址的,等於計算機內部位址匯流排的寬度。
所以在32位 計算機中,乙個指標變數的返回值必定是4(注意結果是以位元組為單位),可以預計,在將來的64位系統中指標變數的sizeof結果為8。
陣列的sizeof
陣列的sizeof值等於陣列所占用的記憶體位元組數,也就是陣列的長度
現在看段**就清楚了
char str = 「xxoo」;
char *p = str ;
int l = sizeof (str );
l = sizeof ( p );
可以分析
int l = sizeof (str );// sizeof 陣列名時是計算陣列的長度
l = sizeof ( p ); // p是個指標,指標在32位機子上長度是4位元組的
在這裡就可以發現,其實求得是陣列長度 不是陣列元素個數
但是如果我們需要求陣列的個數如何求?其實還是蠻簡單 msdn有模型:
int xx = sizeof( oo ) / sizeof( char ); // 總長度/單個元素的長度
sizeof()是c++語言自已的運運算元。一般而言,關於運運算元的行為屬於語言本身自已的規定,不存在為什麼的問題。也就說c++為sizeof運運算元規定的行為就是要對陣列名返回其陣列所佔記憶體的byte計數,而對其它變數返回應有的型別byte長度,
比如:把」char str;」改為」long str[4];」則」sizeof(str);」將返回值為16(16個byte)。而對其指向陣列str[4]指標,在32位平台上記憶體位址的byte長度4。
下面引用乙個經典例題:
double* (*a)[3][6];
cout 既然a是執行double*[3][6]型別的指標,*a就表示乙個double*[3][6]的多維陣列型別,因此 sizeof(*a)=3*6*sizeof(double*)=72。同樣的,**a表示乙個double*[6]型別的陣列,所以 sizeof(**a)=6*sizeof (double*)=24。***a就表示其中的乙個元素,也就是double*了,所以 sizeof(***a)=4。至於****a,就是乙個double了,所以sizeof(****a)=sizeof(double)=8。 sizeof常常用來計算位元組大小,但是對於sizeof你了解多少呢?下面我就遇到的乙個需要注意的地方做乙個記錄。首先,sizeof作用是計算變數的大小,但它不是函式,是關鍵字,這個容易出錯。然後,看下面 include int array define array num sizeof array... ps.轉的一篇文章 假設apache日誌格式為 問題1 在apachelog中找出訪問次數最多的10個ip。awk apache log sort uniq c sort nr head n 10 awk 首先將每條日誌中的ip抓出來,如日誌格式被自定義過,可以 f 定義分隔符和 print指定列 ... include using namespace std class base int main int main int main private int a 佔4位元組 char p 4位元組指標 class derive public base derive private static int...乙個有關sizeof的bug
轉乙個linux apache 日誌分析與狀態
對乙個類求sizeof