乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C語言中有關(guān)強(qiáng)制轉(zhuǎn)換的相關(guān)問題

       風(fēng)雪夜歸人_95 2014-07-17
      一、類型強(qiáng)制轉(zhuǎn)換
      其實(shí)類型強(qiáng)制轉(zhuǎn)換并沒有修改原來存儲的值,也沒有對內(nèi)存做任何的修改,只不過說在取值的時候讀取數(shù)據(jù)的長度不同,進(jìn)而產(chǎn)生了不同的結(jié)果。首先引入一個網(wǎng)上看到的程序:
       int main()
      {

          char uData[50];
          short cOut;
          int i;
          void *p;
          printf("%d\n",sizeof(void *));
          char cc[2]={4,5};
          cOut=*(short *)cc;
          printf("%d\n",cOut);
          for(i=0;i<50;i++)
          {
            uData[i]=i;
          }
          i = (int *)uData;
          int j = uData;
          printf("%d\n",j);
          printf("%d\n",i);
          i = (int *)uData+1;
          printf("%d\n",i);

          cOut=*(short *)((int *)uData+1);
          printf("%d\n",cOut);

          return 0;
      }

      運(yùn)行結(jié)果為:
       
       
      通過上面的結(jié)果可以得到以下初步結(jié)論:
      1. (void *)的存儲空間為4個字節(jié)
      2. (int *)uData+1 等價于 uData+4
      3. 小端存儲。一個字符數(shù)組轉(zhuǎn)換為一個short型的數(shù)據(jù)時,原字符數(shù)組中數(shù)組索引越大,該值在short型中所處的位越高。例: cc[0]='4'. cc[1]='5',cOut=*(short*)cc,則cOut=0x0504(十進(jìn)制就是1284)。

      針對上面的程序,實(shí)際上主要解釋一句:
      cOut=*(short *)((int *)uData+1);
      uData是一個char型數(shù)組的首地址,擴(kuò)展為一個指向int型數(shù)據(jù)的指針;指針加1的操作實(shí)際上是指針原來的值加上指針?biāo)鶎?yīng)類型的字節(jié)數(shù)(這里是int,int在這里需要4個字節(jié))。所以,uData無論擴(kuò)展與否,其值都是2686682(一個隨機(jī)分配的起始地址,此時的*(int *)uData=0x00010203),指針加1操作后,變?yōu)?686686(此時的*((int *)uData+1)=0x0405060708)。此時該指針又進(jìn)行了一次強(qiáng)制轉(zhuǎn)換,變成一個指向short型數(shù)據(jù)的指針,最后將該指針的內(nèi)容賦給cOut。所以
      cOut=0x0504(上面的結(jié)論三知道,數(shù)據(jù)是小端存儲的)。

      二、指針強(qiáng)制轉(zhuǎn)換為指向指針的指針
      看看下面的這段代碼:
       int main()
      {

          int *p;
          int **q;
          int i = 1;
          p=&i;
          q = (int **)p;
          printf("%d\n",p);
          printf("%d\n",&p);
          printf("%d\n",*p);
          printf("%d\n",q);
          printf("%d\n",&q);
          printf("%d\n",*q);

          return 0;
      }


      其運(yùn)行的結(jié)果為:
       
       
      可見,指向指針的指針也不過是一個指針罷了,只不過指向指針的指針存儲的值是一個普通變量的地址的地址;一個指針變量也就是一個變量罷了,只不過指針存儲的是一個普通變量的地址。而將一個指針強(qiáng)制轉(zhuǎn)化為一個指針的指針,也是可行的,但是其具體的意義有多大,不清楚。


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多