亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 22223 | 回復(fù): 132
打印 上一主題 下一主題

苦思冥想,關(guān)于【指針類型強制轉(zhuǎn)換】的問題,求解! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-06-15 21:04 |只看該作者 |倒序瀏覽
本帖最后由 warmofice 于 2012-06-15 21:33 編輯

        先看代碼:
                   unsigned char arr[2] = {0xffff0101,0x00000001};  
                    
                   printf("%d\n",  *((char *)&(arr[0])));
                   printf("%d\n",  *((int *)&(arr[0])));
      
         運行結(jié)果:
                   1
                   257

         上文我能理解,知道指針類型決定了  *(指針)的值得取值范圍。但是下文,我就不理解了。
                   unsigned int a = 0xfffffff7;
        
                   printf("%x\n", *((int   *)&a));
                   printf("%x\n", *((char *)&a));
          運行結(jié)果:
                    0xfffffff7
                    0xfffffff7
-----------------------------------------------------------------------
         我不明白指針的類型是什么意思,我明白指針其實就是一個32位的整數(shù),以前這么認為
         比如:unsigned char *p 的值是0x00000004,所以 *p的值就是0x00000004的【值也也就是這個地址的8位二進制的和】;
         比如:unsigned int *p的值是0x00000004,所以 *p的值就是0x00000004【開始的4個字節(jié)的二進制的和】;

         而我發(fā)現(xiàn),許多書上寫的是,指針類型的轉(zhuǎn)換只是影響的指針的尋址,不影響指針值,我迷惑了!希望有人來回答!

         到底指針類型表示著什么?

論壇徽章:
2
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
2 [報告]
發(fā)表于 2012-06-15 21:09 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
3 [報告]
發(fā)表于 2012-06-15 21:16 |只看該作者
printf(, *((char *)&a));
pls use printf("%c\n",

assume there are the following code
char [1111]="%x\n";
printf(fmthex,*((char *)&a));
fmthex[1]='c';
printf(fmthex,*((char *)&a));

now you may understand what happy: the compiler doesn't know which type be transport into the function "printf";
which is parsed by the function "printf" itself. and the compiler can't (some compiler can do a few check about function printf & scanf)
understand what happen about the first parameter of printf( which be understand as a formating string).
while use printf, it is your duty to make the program acts right.

wish it helps, thks

論壇徽章:
0
4 [報告]
發(fā)表于 2012-06-15 21:19 |只看該作者
回復(fù) 2# pmerofc


    首先,我尊重你的回答,但是我覺得你只說不對,卻不說或者說不出為什么,我表示很無奈!還有,那代碼是我經(jīng)過測試,沒問題的,書上原題,是《面試寶典3》里面類型轉(zhuǎn)換的第一道題!5.4,34頁。

論壇徽章:
2
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
5 [報告]
發(fā)表于 2012-06-15 21:30 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
6 [報告]
發(fā)表于 2012-06-15 21:32 |只看該作者
回復(fù) 3# folklore


    首先感謝你的回答,一方面羨慕你的英文水平,一方面很感謝你的耐心回答。

    我大概是明白你的意思,也有可能是理解不對,你的意思是printf函數(shù)是需要指定輸出的格式。編譯器有的時候不知道是什么格式。

    但是在第二段代碼的都是printf(“%d”,。。。),卻輸出的不都是一個字節(jié)的值,我不理解的其實僅僅是這點。。。char類型的指針輸出一個字節(jié)的值,而int類型的指針卻輸出的是4個字節(jié)的值。我很不理解呀~~~

論壇徽章:
0
7 [報告]
發(fā)表于 2012-06-15 21:37 |只看該作者
回復(fù) 5# pmerofc


    你若覺得是垃圾,未必我覺得是垃圾,像你說的我基礎(chǔ)差,所以我覺得不垃圾。

    與其吐槽,你不如告訴我提的問題在哪里。OK?你說的明明白白,那我佩服你,不過你還是不回答問題,我只能說很無奈啊~

論壇徽章:
0
8 [報告]
發(fā)表于 2012-06-15 21:42 |只看該作者
回復(fù) 5# pmerofc


    比如:unsigned char *p 的值是0x00000004,所以 *p的值就是0x00000004的【值也也就是這個地址的8位二進制的和】;
    比如:unsigned int *p的值是0x00000004,所以 *p的值就是0x00000004【開始的4個字節(jié)的二進制的和】;

     希望你不要吐槽了,回答我的問題。

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
9 [報告]
發(fā)表于 2012-06-15 21:48 |只看該作者
回復(fù) 6# warmofice


    i am sorry i am no chinese input method installed in my pc.

change

  1. printf("%x\n", *((char *)&a));
復(fù)制代碼
to

  1. printf("%x\n", *((unsigned char *)&a));
復(fù)制代碼
in c, the char be imps as a interger, it lead the problem that you faced.
some compiler imps the char to unsigned char
but others translating it to singed char (just as the one you have);
0xffffffff7 to char= 0xf7
pass f7 as a parament to printf,it will be changed to integer(the wordwidth of your pc).
if you compile this program into a 32 bit machine, the result is 0xfffffff7: it is 32bits
or it may be 0xfffffffffffffff7 in 64 bit prg.

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
10 [報告]
發(fā)表于 2012-06-15 21:51 |只看該作者
回復(fù) 9# folklore


    if you can't understand, try the following code

  1. printf("%x,%x",(char)0xf7,0xf7);
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP