小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 風(fēng)雪夜歸人_95 2014-07-17
一、類型強(qiáng)制轉(zhuǎn)換
其實(shí)類型強(qiáng)制轉(zhuǎn)換并沒有修改原來存儲(chǔ)的值,也沒有對(duì)內(nèi)存做任何的修改,只不過說在取值的時(shí)候讀取數(shù)據(jù)的長(zhǎng)度不同,進(jìn)而產(chǎn)生了不同的結(jié)果。首先引入一個(gè)網(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 *)的存儲(chǔ)空間為4個(gè)字節(jié)
2. (int *)uData+1 等價(jià)于 uData+4
3. 小端存儲(chǔ)。一個(gè)字符數(shù)組轉(zhuǎn)換為一個(gè)short型的數(shù)據(jù)時(shí),原字符數(shù)組中數(shù)組索引越大,該值在short型中所處的位越高。例: cc[0]='4'. cc[1]='5',cOut=*(short*)cc,則cOut=0x0504(十進(jìn)制就是1284)。

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

二、指針強(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é)果為:
 
 
可見,指向指針的指針也不過是一個(gè)指針罷了,只不過指向指針的指針存儲(chǔ)的值是一個(gè)普通變量的地址的地址;一個(gè)指針變量也就是一個(gè)變量罷了,只不過指針存儲(chǔ)的是一個(gè)普通變量的地址。而將一個(gè)指針強(qiáng)制轉(zhuǎn)化為一個(gè)指針的指針,也是可行的,但是其具體的意義有多大,不清楚。


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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多