C語言中sizeof()詳解

只要參加軟件研發(fā)的筆試(C/C++)幾乎都會涉及到sizeof()的用法,我昨天也遇到了个曙,有的也會伙菜,但是真正sizeof()的核心還是沒有領會,今天上網转唉,無聊中就看到了詳細的sizeof()的闡述皮钠,現在分享給大家。


------------sizeof----------------

sizeof 一般形式為:sizeof(object)赠法,也可以sizeof var_char,不過大部分programer習慣用sizeof()麦轰。

???? 對象可以是表達式或者數據類型名,當對象是表達式時砖织,括號可省略款侵。sizeof是單目運算符,其運算符的含義是:求出對象在計算機內存中所占用的字節(jié)數侧纯。一般來講新锈,不同的機器,運行不同的對象是不一樣的眶熬,當目前幾乎所有的機器都是32位妹笆,很少16位的,所以一般考試都是基于32位的window和linux的娜氏。

歡迎大家加入小編的C/C++學習交流裙【 五二一拳缠,一一零,一三零】贸弥,無論你是大牛還是小白脊凰,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具茂腥,很多干貨和技術資料分享!

C語言中數據類型不多切省。

1.整數型的:

short最岗,int,long(我沒有考慮符號問題),一般c語言書上講朝捆,int是2個字節(jié)的般渡,即16位,范圍是-32768-32767,long是4個字節(jié)驯用,范圍是-2^32---2^32-1脸秽。當時在xp上運行sizeof(int)的時候,會output 4.這就是32位的原因蝴乔。sizeof(long)也是4.

如下:#include "stdio.h"

#include "string.h"

#include "stdlib.h"

int main()

{

short int sa=10;

int a=10;

long la=10;

float f = 20;

double d=20;

char ch='c';

char str[]="ABC";

char *p=str;

struct str{

double d;

char ch;

int data;

}str_wu;

struct str1{

char ch;

double d;

int data;

}str_wu1;

printf("sizeof(short):%d\n",sizeof(sa));

printf("sizeof(int):%d\n",sizeof(a));

printf("sizeof(long):%d\n",sizeof(la));

printf("sizeof(float):%d\n",sizeof(f));

printf("sizeof(double):%d\n",sizeof(d));

printf("sizeof(char):%d\n",sizeof(ch));

printf("sizeof(string):%d\n",sizeof(str));

printf("sizeof(point address):%d\n",sizeof(p));

printf("sizeof(Point):%d\n",sizeof(*p));

printf("sizeof(Struct):%d\n",sizeof(str_wu));

printf("sizeof(Struct):%d\n",sizeof(str_wu1));

system("pause");

}

因而int记餐,short的sizeof結果是一樣的額。

歡迎大家加入小編的C/C++學習交流裙【 五二一薇正,一一零片酝,一三零】,無論你是大牛還是小白挖腰,是想轉行還是想入行都可以來了解一起進步一起學習雕沿!裙內有開發(fā)工具,很多干貨和技術資料分享猴仑!

2.浮點型數據

float审轮,double,long double

上邊的圖辽俗,long double 沒有測試(忘了疾渣。。榆苞。稳衬。。)呵呵坐漏!

但是應該是16薄疚。


3。指針

對于指針赊琳,要特別區(qū)分街夭,指針指向什么數據,它在內存占的字節(jié)數才是它的結果躏筏。

比如:指針指向一個字符串板丽,就是字符串的長度,因為一個字符在內存中占一個字節(jié)趁尼。若指針指向一個數據結構埃碱,則結果應該是結構型數據的內存字節(jié)數。

歡迎大家加入小編的C/C++學習交流裙【 五二一酥泞,一一零砚殿,一三零】,無論你是大牛還是小白芝囤,是想轉行還是想入行都可以來了解一起進步一起學習似炎!裙內有開發(fā)工具辛萍,很多干貨和技術資料分享!

4羡藐。結構類型

在上面的程序中贩毕,

struct str{

double d;

char ch;

int data;

}str_wu;

struct str1{

char ch;

double d;

int data;

}str_wu1;

兩個不同的結構,但是內部的元素是相同的仆嗦,都是double辉阶,int,char欧啤,只是順序不一樣睛藻,就結果不一樣。why邢隧?

這時因為VC存儲數據的時候要對其店印,具體的情況如下:

類型

對齊方式(變量存放的起始地址相對于結構的起始地址的偏移量)

Char

偏移量必須為sizeof(char)即1的倍數

int?

偏移量必須為sizeof(int)即4的倍數

float

偏移量必須為sizeof(float)即4的倍數

double

偏移量必須為sizeof(double)即8的倍數

Short

偏移量必須為sizeof(short)即2的倍數

歡迎大家加入小編的C/C++學習交流裙【 五二一,一一零倒慧,一三零】按摘,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習纫谅!裙內有開發(fā)工具炫贤,很多干貨和技術資料分享!

比如:str_wu付秕,為上面的結構分配空間的時候兰珍,VC根據成員變量出現的順序和對齊方式,先為第一個成員dda1分配空間询吴,其起始地址跟結構的起始地址相同(剛好偏移量0剛好為sizeof(double)的倍數)掠河,該成員變量占用sizeof(double)=8個字節(jié);接下來為第二個成員dda分配空間猛计,這時下一個可以分配的地址對于結構的起始地址的偏移量為8唠摹,是sizeof(char)的倍數,所以把dda存放在偏移量為8的地方滿足對齊方式奉瘤,該成員變量占用sizeof(char)=1個字節(jié)勾拉;接下來為第三個成員type分配空間,這時下一個可以分配的地址對于結構的起始地址的偏移量為9盗温,不是sizeof(int)=4的倍數藕赞,為了滿足對齊方式對偏移量的約束問題,VC自動填充3個字節(jié)(這三個字節(jié)沒有放什么東西)卖局,這時下一個可以分配的地址對于結構的起始地址的偏移量為12斧蜕,剛好是sizeof(int)=4的倍數,所以把type存放在偏移量為12的地方吼驶,該成員變量占用sizeof(int)=4個字節(jié)惩激;這時整個結構的成員變量已經都分配了空間,總的占用的空間大小為:8+1+3+4=16蟹演,剛好為結構的字節(jié)邊界數(即結構中占用最大空間的類型所占用的字節(jié)數sizeof(double)=8)的倍數风钻,所以沒有空缺的字節(jié)需要填充。所以整個結構的大小為:sizeof(str_wu)=8+1+3+4=16酒请,其中有3個字節(jié)是VC自動填充的骡技,沒有放任何有意義的東西。

而str_wu1羞反,同樣的道理:如下:sizeof(char)=1,而1不是8的倍數布朦,因而增加到8,sizeof(double)=8昼窗,現在開始地址是16是趴,16是sizeof(int)的倍數,可以存入澄惊。

因而總的地址數:sizeof(char)+7+sizeof(double)+sizeof(int)=20唆途,

而20不是8的倍數(sizeof(double)=8),所以需要在增加4個地址,即總共24掸驱。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末肛搬,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子毕贼,更是在濱河造成了極大的恐慌温赔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鬼癣,死亡現場離奇詭異陶贼,居然都是意外死亡,警方通過查閱死者的電腦和手機扣溺,發(fā)現死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門骇窍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锥余,你說我怎么就攤上這事腹纳。” “怎么了驱犹?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵嘲恍,是天一觀的道長。 經常有香客問我雄驹,道長佃牛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任医舆,我火速辦了婚禮俘侠,結果婚禮上象缀,老公的妹妹穿的比我還像新娘。我一直安慰自己爷速,他們只是感情好央星,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惫东,像睡著了一般莉给。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廉沮,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天颓遏,我揣著相機與錄音,去河邊找鬼滞时。 笑死叁幢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的漂洋。 我是一名探鬼主播遥皂,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刽漂!你這毒婦竟也來了演训?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贝咙,失蹤者是張志新(化名)和其女友劉穎样悟,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體庭猩,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡窟她,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蔼水。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震糖。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖趴腋,靈堂內的尸體忽然破棺而出吊说,到底是詐尸還是另有隱情,我是刑警寧澤优炬,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布颁井,位于F島的核電站,受9級特大地震影響蠢护,放射性物質發(fā)生泄漏雅宾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一葵硕、第九天 我趴在偏房一處隱蔽的房頂上張望眉抬。 院中可真熱鬧贯吓,春花似錦、人聲如沸蜀变。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昏苏。三九已至,卻和暖如春威沫,著一層夾襖步出監(jiān)牢的瞬間贤惯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工棒掠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孵构,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓烟很,卻偏偏與公主長得像颈墅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雾袱,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容