sizeof 是計算分配記憶體的大小,是c語言中保留關鍵字,也可以認為是一種運算子,單目運算子。但是最好不要把sizeof當成函式,也不要看作一元操作符,把他當成乙個特殊的編譯預處理。
sizeof(typename)//sizeof(型別)
sizeof objict//sizeof物件
strlen執行的計數器的工作它從記憶體的某個位置開始掃瞄,直到碰到第乙個字串結束符』\0』為止,然後返回計數器值,求的是字串的實際長度。
sizeof是關鍵字,它以位元組的形式給出了其運算元的儲存大小,求的是占用記憶體的大小,運算元可以是乙個表示式或型別名,運算元的儲存大小由運算元的型別決定。
(sizeof統計'\0',strlen不統計'\0')
指標也是變數,只不過它是存放其他變數的位址的變數。指標的本質就是整形,指標又叫無符號的整形,所以,可以說指標的sizeof都為4。即在32位系統是4,在64系統是8。
int main()
陣列s1,s2的大小在定義時未指定,編譯時給它分配的空間是按照初始化的值確定的,s3是多維陣列,占用的空間大小是各維數的乘積,也就是36。可以看出,陣列的大小就是他在編譯時被分配的空間,也就是各維數的乘積*陣列元素的大小。
特別需要注意的是(1)a是動態陣列,但是它實質上還是乙個指標,所以sizeof(d)的值是4。
int main()
; char s1="sdeef";
int s2= ;
int s3[3][3]= ,};
cout<
(2)可以用sizeof求陣列長度,如int a[10]; sizeof(a)/sizeof(a[0])或 sizeof(a)/sizeof(int)可以獲取陣列的長度 .
(3)陣列作為形式引數傳遞給函式時,傳遞的是指標而不是陣列,傳遞的為陣列的首位址。如fun(char[8])和fun(char)都等價於fun(char*)。
int fun(int arr)
return sum;
}int main()
; int sumadd=0;
for(int i=0;i
cout<
對齊使得結構體大小的計算變得複雜,並非簡單地等於各個成員的大小之和。
對於結構體大小的計算規則:
結構體的大小等於結構體內最大成員大小的整數倍。 結構體內的成員的首位址相對於結構體首位址的偏移量是其型別大小的整數倍,如int型成員相對於結構體的首位址的位址偏移量應該是4的倍數。為了滿足1和2會在結構體成員之後進行位元組填充。
如對結構體a,根據成員變數出現的順序和對齊方式,先為第乙個成員am分配空間,其起始位址跟結構的起始位址相同,該成員變數占用4位元組。接下來為第二個成員bm分配空間,這時下乙個可以分配的位址對於結構的起始位址的偏移量為4,該成員變數占用8位元組,不是其倍數,填充三個位元組,為bm分配的起始位址的偏移量為8。然後為第三個成員cn分配空間,下乙個可以分配的位址對於結構的起始位址的偏移量為16,cm占用乙個位元組,17不是8的倍數,填充7個位元組,結構體a的大小是24。
對結構體b,根據成員變數出現的順序和對齊方式,先為第乙個成員an分配空間,其起始位址跟結構的起始位址相同,該成員變數占用4位元組。接下來為第二個成員bm分配空間,這時下乙個可以分配的位址對於結構的起始位址的偏移量為4,該成員變數占用1位元組,是其倍數,為bm分配的起始位址的偏移量為5。然後為第三個成員cn分配空間,下乙個可以分配的位址對於結構的起始位址的偏移量為6,cm占用8個位元組,不是8的倍數,填充2個位元組,結構體b的大小是16。
int main()
; printf("sizeof c = %d\n",sizeof(c) );
}
注意:空結構體大小為1。
sizeof可以對函式呼叫求大小,並且求得的大小等於返回型別的大小,並不執行函式體。
int fun(int a)
{ int sum=0;
for(int i=0; i
關鍵字 sizeof(不是函式)
關鍵字 sizeof 不是函式 sizeof是關鍵字不是函式。sizeof在計算變數所佔空間大小時,括號可以省略,而計算型別 模子 大小時不能省略。include int getsize int data void fun int b 100 int main int a 100 int b 100...
C語言 sizeof 關鍵字
sizeof是c語言中保留關鍵字,也可以認為是一種運算子,單目運算子,可以計算運算元的大小。sizeof的結果是無符號整數型別,通常用size t表示。sizeof可以應用於各種資料型別,包括基本的資料型別,例如整數和浮點型別,指標型別和符合資料型別,結構體等等。32位編譯器 includeint ...
C 關鍵字sizeof講解
sizeof 是乙個關鍵字,它是乙個編譯時運算子,用於判斷變數或資料型別的位元組大小。sizeof 運算子可用於獲取類 結構 共用體和其他使用者自定義資料型別的大小。其作用是返回乙個物件或型別所佔的記憶體位元組數。使用 sizeof 的語法如下 sizeof data type 1 sizeof o...