<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 回憶青牛的筆試題,試題分享

    時(shí)間:2024-06-10 15:35:40 綜合指導(dǎo) 我要投稿
    • 相關(guān)推薦

    回憶青牛的筆試題,試題分享

      【zz】

    回憶青牛的筆試題,試題分享

      1 第一個(gè)

      void main()

      {

      int a[5] = {1,2,3,4,5};

      int *ptr = (int *)(&a + 1);

      int *ptr2 = a+1;

      printf("%d,%d,%d\n", *(a+1), *(ptr-1), *(ptr2-1));

      }

      輸出為2,5,1

      問題:中間那個(gè)5是怎么來(lái)的?

      int a[5] = {1,2,3,4,5};

      此語(yǔ)句會(huì)讓系統(tǒng)在棧內(nèi)存中分配5個(gè)連續(xù)的int型(32位機(jī)是四個(gè)字節(jié))空間 a是一個(gè)指針常量,a應(yīng)該是被分配在靜態(tài)存儲(chǔ)區(qū)(不敢肯定,望大牛解惑 當(dāng)然不是,是存在棧空間的動(dòng)態(tài)存儲(chǔ)的,這我自己知道),并且有一個(gè)固定的值假設(shè)該數(shù)組的首地址為4000,即a的值是4000,那麼數(shù)組元素5的地址應(yīng)該是&a[4] = 4000+4*4 = 4016 另外假設(shè)a的地址是3000

      int *ptr = (int *)(&a + 1);

      指針做加法時(shí),我們要關(guān)心的不是指針本身,而是指針?biāo)赶虻臄?shù)據(jù)類型很明顯&a是一個(gè)指針(指針和地址的概念是等價(jià)的,若對(duì)這句話有異議,我們可以一起討論),這個(gè)指針?biāo)赶虻氖莂 。而a是一個(gè)數(shù)組類型(注意,這里不能將a理解為一個(gè)指針常量,數(shù)組和指針的區(qū)別還是很大的),sizeof(a) = 20

      所以 ptr = &a+1 = 3000+20 = 3020,在將其轉(zhuǎn)換為int*型

      所以ptr-1 = 3020 - 4 = 3016, 這片內(nèi)存中的數(shù)是不確定的, 所以第二個(gè)打印出來(lái)5完全是碰巧的,要不就是編譯器的問題

      記住,數(shù)組就是數(shù)組,指針就是指針,千萬(wàn)不要混用(雖然有時(shí)候混用是正確的). 只有當(dāng)數(shù)組以實(shí)參傳遞給函數(shù)時(shí),它才會(huì)變成指針。

      這道題我們應(yīng)該這樣理解:

      a是一個(gè)int[5]型的數(shù)組,那么&a自然是指向這個(gè)數(shù)組(千萬(wàn)不要以為&a指向一個(gè)指針常量,這就是上面所犯的錯(cuò)誤),那么&a+1自然是指向下一個(gè)數(shù)組

      所以 ptr = 4000 + 20 = 4020 , 而不是3016。

      第二題

      void main()

      {

      char a[][3] = {1,2,3,4,5};

      cout<

      }

      輸出為12345

      問題:a[1][2]為啥是0,而不是隨機(jī)值?

      此題中 a[][3] 與 a[2][3]是等價(jià)的,系統(tǒng)會(huì)自動(dòng)不上一個(gè)\0(控制字符)如果輸出a[1][2]不會(huì)輸出數(shù)值0,因?yàn)?對(duì)應(yīng)字符是(null)這個(gè)控制字符,因此會(huì)啥也不輸出,只是一個(gè)空格a[0]代表了字符數(shù)組(字符串)的首地址,大家都知道如果用cout輸出一個(gè)字符串名字(也即首地址)會(huì)輸出該字符串的內(nèi)容,因此cout<

      三、

      class cls

      {

      public:

      virtual void func1(){}

      virtual void func2 (){}

      void func3(){}

      protected:

      private:

      static char m_data;};

      int main()

      {cout

      return 0; }

      輸出4 理由:static變量占用的是靜態(tài)區(qū)內(nèi)存而cls占用的是動(dòng)態(tài)區(qū),因此不含有char m_data的內(nèi)存, func3函數(shù)是不占用內(nèi)存的(不管是否在類內(nèi)實(shí)現(xiàn)還是在類外實(shí)現(xiàn),也不管是否有參數(shù)和返回值),實(shí)際上cls的內(nèi)存只有分配了一個(gè)虛擬函數(shù)表的地址,用來(lái)管理虛擬函數(shù)的,不論加入多少虛擬函數(shù)都只有4個(gè)字節(jié)的大小,如果把static去掉,那將輸出8,而不是5,這跟struct的內(nèi)存對(duì)齊是一個(gè)道理的。

      但當(dāng)類是空類是,只占有1個(gè)字節(jié),這大概是系統(tǒng)至少要給類分配一個(gè)最小空間以便讓系統(tǒng)知道有該類的存在。


    【回憶青牛的筆試題,試題分享】相關(guān)文章:

    騰訊筆試題 試題分享02-24

    上海理工筆試回憶,試題分享11-21

    采購(gòu)人員筆試題,試題分享02-25

    HTC筆試題分享11-21

    IT相關(guān)筆試題分享11-21

    寶潔 筆試題分享11-21

    思科 筆試題分享11-21

    CLUB筆試題分享11-21

    軟件筆試題 分享11-21

    主站蜘蛛池模板: 久久久人妻精品无码一区| 中文字幕av日韩精品一区二区| 亚洲а∨天堂久久精品| 精品久久久久久| 无码少妇精品一区二区免费动态| 国产午夜精品一区二区| 久久99精品国产麻豆宅宅| 精品久久久久久无码专区| 最新精品国偷自产在线| 精品久久人人妻人人做精品| 久久精品国产一区二区三区日韩| 欧美精品亚洲精品日韩传电影| 无码8090精品久久一区| 国产精品国产三级国产潘金莲| 麻豆精品久久精品色综合| 国产suv精品一区二区33| 久久99精品国产麻豆| 蜜国产精品jk白丝AV网站| 亚洲高清专区日韩精品| 亚洲精品第一国产综合境外资源| 久久精品国产WWW456C0M| 国产精品无码免费播放| 成人国产一区二区三区精品| 亚洲AⅤ永久无码精品AA| 国产精品一区二区久久| 国产福利精品一区二区| 久久精品99久久香蕉国产色戒 | 国产在线国偷精品免费看| 精品视频一区二区三区在线观看| 凹凸国产熟女精品视频app | 国产成人无码久久久精品一| 国产一精品一AV一免费| 精品无码久久久久国产| 精品视频无码一区二区三区| 久久国产热精品波多野结衣AV| 久久久精品人妻一区二区三区蜜桃| 少妇人妻无码精品视频| 久久国产精品成人片免费| 精品久久久久久久无码| 国产精品久久久久久福利69堂| 国产精品一区二区久久|