sizeof詳解 筆試必考題

2021-06-10 07:15:26 字數 3101 閱讀 3730

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

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

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

物件可以是表示式或者資料型別名,當物件是表示式時,括號可省略。sizeof是單目運算子,其運算子的含義是:求出物件在計算機記憶體中所占用的位元組數。一般來講,不同的機器,執行不同的物件是不一樣的,當目前幾乎所有的機器都是32位,很少16位的,所以一般考試都是基於32位的window和linux的。

c語言中資料型別不多。

1.整數型的:

short,int,long(我沒有考慮符號問題),一般c語言書上講,int是2個位元組的,即16位,範圍是-32768-32767,long是4個位元組,範圍是-2^32---2^32-1。當時在xp上執行sizeof(int)的時候,會output 4.這就是32位的原因。sizeof(long)也是4.

如下:#include "stdio.h"

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

2.浮點型資料

float,double,long double

上邊的圖,long double 沒有測試(忘了。。。。。)呵呵!

但是應該是16。

3。指標

對於指標,要特別區分,指標指向什麼資料,它在記憶體佔的位元組數才是它的結果。

比如:指標指向乙個字串,就是字串的長度,因為乙個字元在記憶體中佔乙個位元組。若指標指向乙個資料結構,則結果應該是結構型資料的記憶體位元組數。

4。結構型別

在上面的程式中,

struct strstr_wu;

struct str1str_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的倍數

比如:str_wu,為上面的結構分配空間的時候,vc根據成員變數出現的順序和對齊方式,先為第乙個成員dda1分配空間,其起始位址跟結構的起始位址相同(剛好偏移量0剛好為sizeof(double)的倍數),該成員變數占用sizeof(double)=8個位元組;接下來為第二個成員dda分配空間,這時下乙個可以分配的位址對於結構的起始位址的偏移量為8,是sizeof(char)的倍數,所以把dda存放在偏移量為8的地方滿足對齊方式,該成員變數占用sizeof(char)=1個位元組;接下來為第三個成員type分配空間,這時下乙個可以分配的位址對於結構的起始位址的偏移量為9,不是sizeof(int)=4的倍數,為了滿足對齊方式對偏移量的約束問題,vc自動填充3個位元組(這三個位元組沒有放什麼東西),這時下乙個可以分配的位址對於結構的起始位址的偏移量為12,剛好是sizeof(int)=4的倍數,所以把type存放在偏移量為12的地方,該成員變數占用sizeof(int)=4個位元組;這時整個結構的成員變數已經都分配了空間,總的占用的空間大小為:8+1+3+4=16,剛好為結構的位元組邊界數(即結構中占用最大空間的型別所占用的位元組數sizeof(double)=8)的倍數,所以沒有空缺的位元組需要填充。所以整個結構的大小為:sizeof(str_wu)=8+1+3+4=16,其中有3個位元組是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。

----------------------

sizeof具體的,我所知道的就這些了,那位高手還知道什麼,或者我寫的有什麼錯,希望指出。謝謝!

前端面試必考題 CSS盒模型詳解

盒模型是css的基礎中的基礎。因為它的重要性,所以很多面試中都會被提到。它也成為了考察求職者基本素質的一道題。屬於絕對的經典問題。這樣描述,相信大家能意識到盒模型的重要性了吧。我們先來看一種圖 當瀏覽器對乙個html文件進行布局的時候,會把每乙個元素都渲染成乙個矩形的盒子,盒模型就是對這些元素的形狀...

面試 「十大必考題」揭幕

1 為什麼想進本公司?這通常是面試官最先問到的問題。此時面試官就開始評斷錄用與否了,建議大家先判斷自己去應徵的工作性質,是專業能力導向呢,或是需要溝通能力,其實現在市場多以服務為方向,所以口才被視為基本能力之一,所以在此時就要好好表現自己的口才,而口才較差者就務必表現出自己的專業能力即誠意,彌補口才...

面試 「十大必考題」揭幕

面試時,有幾個問題是公司面試人員常常會提出的,針對這些問題好好準備,在面試時也就不會啞口無言,無言以對了,下面就面試十大必考題做出分析 1 為什麼想進本公司?這通常是面試官最先問到的問題。此時面試官就開始評斷錄用與否了,建議大家先判斷自己去應徵的工作性質,是專業能力導向呢,或是需要溝通能力,其實現在...