日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c语言 sizeof_c语言详解sizeof

發布時間:2023/12/15 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 sizeof_c语言详解sizeof 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、sizeof的概念
  sizeof是C語言的一種單目操作符,如C語言的其他操作符++、--等。

它并不是函數。

sizeof操作符以字節形式給出了其操作數的存儲大小。

操作數可以是一個表達式或括在括號內的類型名。

操作數的存儲大小由操作數的類型決定。  二、sizeof的使用方法
  1、用于數據類型 
  sizeof使用形式: sizeof(type)
  數據類型必須用括號括住: sizeof(int)
  2、用于變量 
  sizeof使用形式: sizeof(var_name) 或 sizeof var_name 
  變量名可以不用括號括住.如sizeof (var_name),sizeof var_name等都是正確形式

帶括號的用法更普遍,大多數程序員采用這種形式。 
  注意:sizeof操作符不能用于函數類型,不完全類型或位字段。

不完全類型指具有未知存儲大小的數據類型,

如未知存儲大小的數組類型、未知內容的結構或聯合類型、void類型等。 
  例如: sizeof(max) --若此時變量max定義為int max();

sizeof(char_v)  --若此時char_v定義為char char_v[MAX]且MAX未知,

sizeof(void)

以上都是不正確形式。  三、sizeof的結果(以下結果都是在Linux v2.6 gcc v4獲取)
  sizeof操作符的結果類型是size_t

它在頭文件中定義為: typedef unsigned int size_t;

該類型保證能容納實現所建立的最大對象的字節大小.
  1、ANSI C正式規定字符類型為1字節。 
sizeof(char) = 1;

sizeof(unsigned char) = 1;

sizeof(signed char) = 1;
  2、其他類型在ANSI C中沒有具體規定,大小依賴于實現。


sizeof(int) = 4;

sizeof(unsigned int) = 4;

sizeof(short int) = 2;

sizeof(unsigned short) = 2;

sizeof(long int) = 4;

sizeof(unsigned long) = 4;

sizeof(float) = 4;

sizeof(double) = 8;

sizeof(long double) = 12;


  3、當操作數是指針時,sizeof依賴于編譯器。

Microsoft C/C++7.0中,near類指針字節數為2,far、huge類指針字節數為4。

一般Unix/Linux的指針字節數為4。 

例如: char *p; //Linux中

sizeof(p) = 4;
  4、當操作數具有數組類型時,其結果是數組的總字節數。

例如: char a[5];

int b[5];

sizeof(a) = 5;

sizeof(b) = 20;

5、當操作數是具體的字符串或者數值時,會根據具體的類型進行相應轉化。

例如: sizeof(8) = 4; //自動轉化為int類型

sizeof(8.8) = 8; //自動轉化為double類型,注意,不是float類型

sizeof("ab") = 3 //自動轉化為數組類型,

//長度是4,不是3,因為加上了最后的'n'符

//有資料說,會自動轉化為指針類型(Linux為4)

//可能和操作系統與編譯器有關系


  6、當操作數是聯合類型時,sizeof是其最大字節成員的字節數。

當操作數是結構類型時,sizeof是其成員類型的總字節數,包括補充字節在內。 

還是讓我們拿例子來說話:

union u{ //對union來說

char c;

double d;

}u;

sizeof(u) = max(sizeof(c),sizeof(d)) = sizeof(1,8) = 8;


  struct a{ //對struct來說

char b; 

double x;

}a;
  在Linux上: sizeof(a) = 12;

而一般sizeof(char) + sizeof(double) = 9;
  這是因為編譯器在考慮對齊問題時,在結構中插入空位以控制各成員對象的地址對齊。

但如果全對齊的話,sizeof(a) = 16, 這是因為b被放到偏移量為0的地址,占1個字節;

在存放x時,double類型長度為8,需要放到能被8整除的偏移量上,這時候需要補7個空字節,

達到8個,這時候偏移量為8,放上x后長度為16。

在此例中,所有的結構成員都要放在被4整除的地址(Linux的存放方式),這里補3個字節,所以為12。
  7、當操作數是函數中的數組形參或函數類型的形參:

sizeof給出其指針的大小,Linux中值為4。四、sizeof與其他操作符的關系
  sizeof的優先級為2級,比/、%等3級運算符優先級高。

它可以與其他操作符一起組成表達式:

例如: int i = 10;

i * sizeof(int);

五、sizeof的主要用途
  1、主要用途是與存儲分配和I/O系統那樣的例程進行通信。

例如: void *malloc(size_t size);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE * stream); 
  2、另一個的主要用途是計算數組中元素的個數。

例如: void *memset(void *s, int c, sizeof(s)); 

歡迎大家加入:C語言/C++學習交流群【734918292】,一起學習,進步!

相關資料:

數據結構之鏈表精講_嵌入式-創客學院?www.makeru.com.cnC語言指針核心16講_嵌入式-創客學院?www.makeru.com.cn

總結

以上是生活随笔為你收集整理的c语言 sizeof_c语言详解sizeof的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。