亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學習啦 > 學習英語 > 專業(yè)英語 > 計算機英語 > c語言sizeof的用法

      c語言sizeof的用法

      時間: 長思709 分享

      c語言sizeof的用法

        sizeof一般形式為:sizeof(object),也可以sizeofvar_char,不過大部分programer習慣用sizeof()。
        對象可以是表達式或者數(shù)據(jù)類型名,當對象是表達式時,括號可省略。下面小編就為大家介紹c語言sizeof的用法。
        sizeof是單目運算符,其運算符的含義是:求出對象在計算機內(nèi)存中所占用的字節(jié)數(shù)。一般來講,不同的機器,運行不同的對象是不一樣的,當目前幾乎所有的機器都是32位,很少16位的,所以一般考試都是基于32位的window和linux的。C語言中數(shù)據(jù)類型不多。
        1.整數(shù)型的:
        short,int,long一般c語言書上講,int是2個字節(jié)的,即16位,范圍是-32768-32767,long是4個字節(jié),范圍是-2^32---2^32-1。當時在xp上運行sizeof(int)的時候,會output4.這就是32位的原因。sizeof(long)也是4.
        如下:#include"stdio.h"#include"string.h"#include"stdlib.h"intmain(){
        shortintsa=10;inta=10;longla=10;floatf=20;doubled=20;charch=''c'';
        charstr[]="ABC";char*p=str;structstr{doubled;charch;intdata;}str_wu;structstr1{charch;doubled;intdata;}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(pointaddress):%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結果是一樣的額。
        2.浮點型數(shù)據(jù)
        float,double,longdouble
        指針對于指針,要特別區(qū)分,指針指向什么數(shù)據(jù),它在內(nèi)存占的字節(jié)數(shù)才是它的結果。比如:指針指向一個字符串,就是字符串的長度,因為一個字符在內(nèi)存中占一個字節(jié)。若指針指向一個數(shù)據(jù)結構,則結果應該是結構型數(shù)據(jù)的內(nèi)存字節(jié)數(shù)。
        4。結構類型
        在上面的程序中,structstr{doubled;charch;intdata;}str_wu;structstr1{charch;doubled;intdata;
        }str_wu1;
        兩個不同的結構,但是內(nèi)部的元素是相同的,都是double,int,char,只是順序不一樣,就結果不一樣。why?
        這時因為VC存儲數(shù)據(jù)的時候要對其,具體的情況如下:類型
        對齊方式(變量存放的起始地址相對于結構的起始地址的偏移量)Char
        偏移量必須為sizeof(char)即1的倍數(shù)int
        偏移量必須為sizeof(int)即4的倍數(shù)float
        偏移量必須為sizeof(float)即4的倍數(shù)double
        偏移量必須為sizeof(double)即8的倍數(shù)Short
        偏移量必須為sizeof(short)即2的倍數(shù)
        比如:str_wu,為上面的結構分配空間的時候,VC根據(jù)成員變量出現(xiàn)的順序和對齊方式,先為第一個成員dda1分配空間,其起始地址跟結構的起始地址相同(剛好偏移量0剛好為sizeof(double)的倍數(shù)),該成員變量占用sizeof(double)=8個字節(jié);接下來為第二個成員dda分配空間,這時下一個可以分配的地址對于結構的起始地址的偏移量為8,是sizeof(char)的倍數(shù),所以把dda存放在偏移量為8的地方滿足對齊方式,該成員變量占用sizeof(char)=1個字節(jié);接下來為第三個成員type分配空間,這時下一個可以分配的地址對于結構的起始地址的偏移量為9,不是sizeof(int)=4的倍數(shù),為了滿足對齊方式對偏移量的約束問題,VC自動填充3個字節(jié)(這三個字節(jié)沒有放什么東西),這時下一個可以分配的地址對于結構的起始地址的偏移量為12,剛好是sizeof(int)=4的倍數(shù),所以把type存放在偏移量為12的地方,該成員變量占用sizeof(int)=4個字節(jié);這時整個結構的成員變量已經(jīng)都分配了空間,總的占用的空間大小為:8+1+3+4=16,剛好為結構的字節(jié)邊界數(shù)(即結構中占用最大空間的類型所占用的字節(jié)數(shù)sizeof(double)=8)的倍數(shù),所以沒有空缺的字節(jié)需要填充。所以整個結構的大小為:sizeof(str_wu)=8+1+3+4=16,其中有3個字節(jié)是VC自動填充的,沒有放任何有意義的東西。
        而str_wu1,同樣的道理:如下:sizeof(char)=1,而1不是8的倍數(shù),因而增加到8,sizeof(double)=8,現(xiàn)在開始地址是16,16是sizeof(int)的倍數(shù),可以存入。
        因而總的地址數(shù):sizeof(char)+7+sizeof(double)+sizeof(int)=20,而20不是8的倍數(shù)(sizeof(double)=8),所以需要在增加4個地址,即總共24。----------------------
        sizeof具體的,我所知道的就這些了,那位高手還知道什么,或者我寫的有什么錯,希望指出。謝謝!
      514656