[問題]指標輸出結果

看板C_and_CPP (C/C++)作者 (鐵(鉄))時間15年前 (2010/11/04 16:48), 編輯推噓4(4023)
留言27則, 4人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 我不太懂輸出的值代表甚麼 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 2008 有問題的code: (請善用置底文標色功能) 1 #include<iostream> 2 3 using namespace std; 4 5 int main(int argc , char *argv[]) 6 { 7 char ary[10]={0,1,2,3,4,5,6,7,8,9}; 8 unsigned short *point=NULL; 9 10 point=(unsigned short*)ary; 11 12 cout<<*(++point)<<endl; 13 14 return 0; 15 } 補充說明: 本來認為*(++point)的輸出值應該會是1,但實際上輸出是770. 我不太懂為什麼? 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.188.249 ※ 編輯: facos 來自: 114.44.188.249 (11/04 16:51) ※ 編輯: facos 來自: 114.44.188.249 (11/04 16:52)

11/04 16:55, , 1F
我跑出來的結果是1027...
11/04 16:55, 1F

11/04 16:58, , 2F
看來樓上指到的是0x0304
11/04 16:58, 2F

11/04 17:01, , 3F
我比較好奇的是你覺得 (unsigned short *)ary, 你預期
11/04 17:01, 3F

11/04 17:01, , 4F
它要輸出什麼, 1 ,2 ,3 ,4 ?
11/04 17:01, 4F

11/04 17:03, , 5F
我蠢了,把原po的ary打成 {1,2,3,4...} XDDD
11/04 17:03, 5F

11/04 17:04, , 6F
不是你蠢,是原po一開始打錯
11/04 17:04, 6F

11/04 17:06, , 7F
原來如此,我就在想說他一直修改文章是在修什麼 XDD
11/04 17:06, 7F

11/04 17:06, , 8F
回a大..我以為*(++point)就是輸出指標指向的值
11/04 17:06, 8F

11/04 17:07, , 9F
Yes, 但是如何解讀這個值, 要看指標的類別
11/04 17:07, 9F

11/04 17:07, , 10F
沒錯啊,但是陣列的型別是char啊,byte數不同
11/04 17:07, 10F

11/04 17:07, , 11F
我不太清楚地10行代表的意思
11/04 17:07, 11F

11/04 17:08, , 12F
可用 unsigned char *p 跟 unsigned int *p 試試看
11/04 17:08, 12F

11/04 17:09, , 13F
10: 把ary當作unsigned short的指標,存到pointer
11/04 17:09, 13F

11/04 17:09, , 14F
第10行是將ary前兩個byte當成short,讓point指過去
11/04 17:09, 14F

11/04 17:11, , 15F
先問原po,你知道cout<<*point<<endl;的結果是怎麼來的嗎
11/04 17:11, 15F

11/04 17:14, , 16F
個人的想法*point指向ary[0]的位置,所以*point印出ary[0]
11/04 17:14, 16F

11/04 17:15, , 17F
ary[0]只有1 byte
11/04 17:15, 17F

11/04 17:15, , 18F
cout<<*point<<endl; 為什麼會印出 256 呢?
11/04 17:15, 18F

11/04 17:21, , 19F
回j大 因為*point是short所以輸出256?
11/04 17:21, 19F

11/04 17:21, , 20F
如果你知道256怎麼來的,那應該也可以理解770的原由
11/04 17:21, 20F

11/04 17:29, , 21F
謝謝j大的解說,那如果ary內容變成'0','1'..算得出*point
11/04 17:29, 21F

11/04 17:30, , 22F
12592
11/04 17:30, 22F

11/04 17:32, , 23F
何不實際試試看?
11/04 17:32, 23F

11/04 17:38, , 25F
再無法理解我也沒辦法了 XD
11/04 17:38, 25F

11/04 17:39, , 26F
找到ASCII碼對應的數字再用short的方式存入就可以算出來
11/04 17:39, 26F

11/04 17:40, , 27F
謝謝各位大大!!!
11/04 17:40, 27F
文章代碼(AID): #1CqdDquA (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
4
27
文章代碼(AID): #1CqdDquA (C_and_CPP)