用sizeof傳回變數的位元組大小
sizeof為C語言的特殊運算符號之一,用來取得變數的位元組大小。用途廣泛,現在就來簡單介紹它吧!
sizeof用法如下:
sizeof(變數)
例如:
int x=8; //宣告一個整數型態x變數,其值為8 int size; //宣告一個整數型態size變數,用來儲存x的位元組大小 size=sizeof(x); |
上面程式碼,size儲存的值為整數x所佔用的位元組大小,在32位元的電腦裡,整數所佔用的記憶體空間為4個位元組,所以size=4。
sizeof也可以用來取得陣列的大小,例如:
int x[10]={1,2,3,4,5,6,7,8,9,10}; //宣告一個整數x陣列 int size; //宣告一個整數型態size變數,用來儲存x的位元組大小 size=sizeof(x); |
上面程式碼,size儲存的值為整個x整數陣列所佔用的記憶體大小。以上面的程式碼為例,x陣列共有10個分量(註標),等同於10個整數型態的變數儲存在一起。因此其所佔用的空間總和為(以32位元電腦為例)4*10=40個位元組,所以size=40。
sizeof也可以用來取得整數陣列的長度,即其所包含的註標數量。我們知道sizeof可以直接取得整數變數或整數陣列所佔的記憶體空間。因此,我們可以直接以整數陣列所佔的記憶體空間除以整數陣列中的一個註標所佔的記憶體空間來求得該整數陣列的長度。舉例如下:
int x[10]={1,2,3,4,5,6,7,8,9,10}; //宣告一個整數x陣列 int size; //宣告一個整數型態size變數,用來儲存x陣列的長度 size=sizeof(x)/sizeof(x[0]); //x[0]為x陣列中的第一個註標(因為永遠存在,所以拿它來當除數) |
以上執行結果,size=10。
不只是數值,sizeof也可以儲存字元佔用的記憶體空間,一個字元佔用一個位元組,以下面的程式碼為例:
char x[]="pcnoproblem"; //宣告一個x字元陣列(即字串) int size; //宣告一個整數型態size變數,用來儲存x的位元組大小 size=sizeof(x); |
上面程式碼,size儲存的值為x字元變數所佔用的記憶體大小。以上面的程式碼為例,x變數儲存了”pcnoproblem”(不含引號)共11個半形字元,因此它佔用了11個位元組。可是我們輸出size的話可以發現,size居然等於12!?其實是因為我們是以「字串」的方式來儲存,所以C會自動將字串後再接個’ '(空格)字元,故總共佔用了12個位元組的記憶體空間。如果我們以「字元」的方式來儲存”pcnoproblem”,結果便就不同了。程式碼如下:
char x[]={'p','c','n','o','p','r','o','b','l','e','m'}; //宣告一個x字元陣列 int size; //宣告一個整數型態size變數,用來儲存x的位元組大小 size=sizeof(x); |
練習
寫一程式取得並顯示char、int、long、float、double型態的位元組數。
程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include<iostream> using namespace std; int main() { char a[]="pcnoproblem"; //宣告一個字串a int b; //宣告一個整數b long c; //宣告一個長整數c float d; //宣告一個單倍精準浮點數d double e; //宣告一個雙倍精準浮點數e cout << "char為" << sizeof(a) << "位元組" << endl << "int為" << sizeof(b) << "位元組" << endl << "long為" << sizeof(c) << "位元組" << endl << "float為" << sizeof(d) << "位元組" << endl << "double為" << sizeof(e) << "位元組" << endl; system("pause"); return 0; } |