C語言裡面的sizeof是什麼,C語言中,sizeof是一個?

2022-03-18 14:46:20 字數 6272 閱讀 3130

1樓:

d選項,因為一個int型別的資料需要的大小是4個bytes,double型別是8個bytes。ps:不同的語言可能有所不同。

2樓:小嶽_哥

是用來輸出某個型別的大小的函式,比如int是幾個位元組的

3樓:

用來獲取某一字元型別長度的函式

4樓:杜耕順晏娟

sizeof()

是一個獲取資料型別或者表示式長度的運算子

例如:sizeof(int)就是獲取int型的長度,所以值為4,即int型佔4位元組記憶體

5樓:義寧能羅

sizeof是c/c++中的一個操作符(operator),簡單的說其作用就是返回一個物件或者型別所佔的記憶體位元組數

在你的程式中就是輸出p和q陣列所佔用的位元組數

6樓:匿名使用者

sizeof函式功能:計算資料空間的位元組數

1.與strlen()比較

strlen計算字元陣列的字元數,以"\0"為結束判斷,不計算為'\0'的陣列元素。

sizeof計算資料(包括陣列、變數、型別、結構體等)所佔記憶體空間,用位元組數表示(當然用在字元陣列計算"\0"的大小)。

2.指標與靜態陣列的sizeof操作

指標均可看為變數型別的一種。所有指標變數的sizeof 操作結果均為4。

例項1::char *p;

sizeof(p)=4;

sizeof(*p) = 1; //相當於sizeof(char);

例項2:

對於靜態陣列,sizeof可直接計算陣列大小;

例:int a[10];

char b="hello";

sizeof(a)等於4*10=40;

sizeof(b)等於6;

void fun(char p)

例項3(經典考題):

double* (*a)[3][6];

cout<

cout<

cout<

cout<

cout<

問題解析:

a是一個很奇怪的定義,他表示一個指向double*[3][6]型別陣列的指標。既然是指標,所以sizeof(a)就是4。

既然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。

3.格式的寫法

sizeof操作符,對變數或物件可以不加括號,但若是型別,須加括號。

4.使用sizeof時string的注意事項

string s="hello";

sizeof(s)等於string類的大小(32),sizeof(s.c_str())得到的是與字串長度(4)。

5.union 與struct的空間計算

總體上遵循兩個原則:

(1)整體空間是佔用空間最大的成員(型別)所佔位元組的整數倍

(2)資料對齊原則----資料在記憶體中按照結構成員先後順序進行排序,當排到該成員變數時,其前面已擺放的空間大小必須是該成員型別大小的整倍數,如果不夠則補齊,以此向後類推。。。。。

注意:陣列按照單個變數一個一個的擺放,而不是看成整體。如果成員中有自定義的類、結構體,也要注意陣列問題。

例項4:[引用其他帖子的內容]

因為對齊問題使結構體的sizeof變得比較複雜,看下面的例子:(預設對齊方式下)

struct s1

;struct s2

;cout<

cout<

同樣是兩個char型別,一個int型別,一個double型別,但是因為對齊問題,導致他們的大小不同。計算結構體大小可以採用元素擺放法,我舉例子說明一下:首先,cpu判斷結構體的對界,根據上一節的結論,s1和s2的對界都取最大的元素型別,也就是double型別的對界8。

然後開始擺放每個元素。

對於s1,首先把a放到8的對界,假定是0,此時下一個空閒的地址是1,但是下一個元素b是double型別,要放到8的對界上,離1最接近的地址是8了,所以b被放在了8,此時下一個空閒地址變成了16,下一個元素c的對界是4,16可以滿足,所以c放在了16,此時下一個空閒地址變成了20,下一個元素d需要對界1,也正好落在對界上,所以d放在了20,結構體在地址21處結束。由於s1的大小需要是8的倍數,所以21-23的空間被保留,s1的大小變成了24。

對於s2,首先把a放到8的對界,假定是0,此時下一個空閒地址是1,下一個元素的對界也是1,所以b擺放在1,下一個空閒地址變成了2;下一個元素c的對界是4,所以取離2最近的地址4擺放c,下一個空閒地址變成了8,下一個元素d的對界是8,所以d擺放在8,所有元素擺放完畢,結構體在15處結束,佔用總空間為16,正好是8的倍數。

這裡有個陷阱,對於結構體中的結構體成員,不要認為它的對齊方式就是他的大小,看下面的例子:

例項5:

struct s1

;struct s2

;struct s3

;struct s4

;cout<

cout<

cout<

cout<

s1和s2大小雖然都是8,但是s1的對齊方式是1,s2是8(double),所以在s3和s4中才有這樣的差異。

所以,在自己定義結構體的時候,如果空間緊張的話,最好考慮對齊因素來排列結構體裡的元素。

相關常數:

sizeof int:4

sizeof short:2

sizeof long:4

sizeof float:4

sizeof double:8

sizeof char:1

sizeof p:4

sizeof word:2

sizeof dword:4

c語言中,sizeof是一個?

7樓:秦水芮羅

這是求陣列元素個數的一種寫法。

sizeof(arr)表示整個陣列佔的位元組數(本例中是4*sizeof(int)=16),即總的位元組數。

sizeof(*arr)表示一個元素佔的位元組數(本例中是sizeof(int)=4),即一個元素的位元組數。

總的位元組數/一個元素的位元組數=元素個數。

8樓:嶽樹花陰俏

答案選c

在c語言中char

intfloat

double

分別佔124

8個位元組大小.sizeof()是計算變數所佔記憶體的大小

9樓:釁元斐善甲

當引數為陣列時,

實際傳參會按指標處理.

即這裡的int

arr[10]等效於int

*arr

sizeof(arr)也就是sizeof(int*)對於32位系統,

sizeof(int*)=4

於是選a.

10樓:小黑哎啊

sizeof是c語言中保留關鍵字,也可以認為是一種運算子,單目運算子;sizeof是計算物件所佔的位元組數,通常用來檢視變數、陣列或結構體等所佔的位元組個數;

用法:#include

int main()

一個字元所佔用的記憶體位元組數為1;但陣列最後還有一個null終止符,也佔一個位元組;

c語言中sizeof是什麼意思

11樓:肥仙女

sizeof是c語言中保留關鍵字,也可以認為是一種運算子,單目運算子。常見的使用方式:

int a=10;

int arr=[1,2,3];

char str="hello";

int len_a = sizeof(a);

int len_arr = sizeof(arr);

結果是:len_a=4,len_arr=12,len_str=6

12樓:匿名使用者

int一般佔據四個位元組,double佔據八個位元組

13樓:匿名使用者

char p=,q="abc";

給字元陣列p賦值,共3個元素:'a','b','c'

給字元陣列q賦值,共4個元素:'a','b','c',"\0",因為直接用字串給字元陣列賦值的話,系統最後會加上一個"\0"

sizeof表示字串元素的個數。

14樓:

sizeof是c/c++中的一個操作符(operator),簡單的說其作用就是返回一個物件或者型別所佔的記憶體位元組數

在你的程式中就是輸出p和q陣列所佔用的位元組數

15樓:聽不清啊

sizeof是計算物件所佔的位元組數,通常用來檢視變數、陣列或結構體等所佔的位元組個數。

比如:int a;

char s="he likes swim very much."

struct

person;

sizeof(a); // 計算變數a所佔的位元組數,等價於sizeof(int)

sizeof(s); // 計算字串所佔的位元組數(包括串尾的串結束符'\0'在內)

sizeof(person); // 計算整個結構所佔的位元組總數

16樓:竹林傾聽雨

指的是該物件在記憶體中所佔的位元組數,

例如:你的sizeof(p)是3,佔三個位元組,sizeof(q)佔4個位元組

因為字元陣列還有一個界定符'\0',用來標識字串的結束。

17樓:喻元愷

就是取他在記憶體中佔的寬度啥

c語言中要使用sizeof()應包含那個標頭檔案?

18樓:幻翼高達

c語言中,要使用sizeof()不需要包含標頭檔案,因為sizeof實際是c語言的一種單目運算子,也是關鍵字之一,可以直接使用。

在c語言中,sizeof() 是一個判斷資料型別或者表示式長度的運算子,簡單的說其作用就是返回一個物件或者型別所佔的記憶體位元組數。

sizeof計算物件的大小也是轉換成對物件型別的計算,也就是說,同種型別的不同物件其sizeof值都是一致的。sizeof對一個表示式求值,編譯器根據表示式的最終結果型別來確定大小,一般不會對表示式進行計算。

一般的,在32位編譯環境中,sizeof(int)的取值為4。

19樓:匿名使用者

sizeof是單目運算子,是關鍵字之一,不是函式,沒有標頭檔案

20樓:匿名使用者

sizeof()是運算子,不需要標頭檔案。

21樓:丶風起

不需要包含標頭檔案,是基本運算子

22樓:匿名使用者

只需要#include 就行了,別的不用。

23樓:匿名使用者

這個是不需要標頭檔案的吧

c語言中的 sizeof(x)/sizeof(int); 其中sizeof是什麼作用?

24樓:匿名使用者

求括號中的型別,或者變數的大小。

比如這裡x應該是個int型陣列,那麼用這個陣列的大小,除以int型資料的大小,就得到這個陣列的長度。

(注:這個陣列必須是靜態陣列)

c語言有關sizeof的問題,c語言關於sizeof的問題

a 和 0 都是字元型,一個字元型一個位元組,sizeof是算佔多少記憶體,a 0 是轉化為int進行處理的,計算後是一個int型。int是整形,有的編譯器佔2個位元組,有的佔4個。所以是2,1 因為 a 和 0 都表示的是字元,而字元型常量佔據的記憶體空間為1位元組,即sizeof a 1,siz...

300000ul是什麼意思c語言裡面的一種資料格式是

就是 數字300000 三十萬.u表示 unsigned 無符號.l表示 long 長整數.字尾大小寫都可以,可以單獨使用 100u 也可以組合使用 100ul 除了這兩個之外,還有一個字尾是f,表示float,但是f不可以和u組合,因為浮點數沒有unsigned 這些字尾的作用是指明資料型別.因為...

C語言裡面的float x 193 199f什麼意思

加f表示是單精度浮 點型。浮點型分為單精度浮點型 float 和雙精度浮點型 回double 單精度浮點型專指佔用32位存 答儲空間的單精度 single precision 值,範圍為 3.4e 38 3.4e 38 而雙精度浮點型佔用64位的儲存空間,範圍為 1.7e 308 1.7e 308 ...