[問題] (char *)((long *)str+2)

看板C_and_CPP (C/C++)作者 (将来が見える人)時間16年前 (2010/01/27 09:24), 編輯推噓6(608)
留言14則, 9人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) void main() { char str[] = "0123456789"; printf("%d \n", (char *)(str+2)); printf("%d \n", (char *)((long *)str+2)); } 為什麼我的輸出是 V \ 另外想請問第二個輸出的(long *) 這是麼意思? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.236.214

01/27 09:37, , 1F
你的輸出應該是整數值才對
01/27 09:37, 1F

01/27 09:45, , 2F
可是我用Visual Studio跑出來的結果就是V跟\... 囧rz
01/27 09:45, 2F

01/27 10:06, , 3F
Visual Studio 2008 跑出整數
01/27 10:06, 3F

01/27 11:02, , 4F
str 這是位址吧,位址+2 跟位址指到的東西不同
01/27 11:02, 4F

01/27 11:32, , 5F
Visual C++ 2005跑出數值; 你不會沒include stdio.h吧??
01/27 11:32, 5F

01/27 11:33, , 6F
(long*)與(char*)作用差不多, 代表把後面的變數做強制型
01/27 11:33, 6F

01/27 11:33, , 7F
態轉換....
01/27 11:33, 7F

01/27 11:36, , 8F
printf("%c \n", *str+2);
01/27 11:36, 8F

01/27 16:05, , 9F
printf("%d", (str[2] - '0'));
01/27 16:05, 9F

01/27 17:29, , 10F
第二個不懂@@..值怎麼會是 str + 2 * sizeof(long)
01/27 17:29, 10F

01/27 17:32, , 11F
..= =想起來了..
01/27 17:32, 11F

01/27 22:23, , 12F
因為str指標被強制轉型了 所以移位方式跟long指標一樣
01/27 22:23, 12F

01/29 00:01, , 13F
我有include stdio.h 但是我的結果真的就是V跟\.....
01/29 00:01, 13F

01/29 00:05, , 14F
我看第一行輸出的位址是str+2 但輸出結果卻是V==
01/29 00:05, 14F
文章代碼(AID): #1BNvNFJI (C_and_CPP)
文章代碼(AID): #1BNvNFJI (C_and_CPP)