作者usanhuang (呱呱)
看板C_and_CPP
標題[問題] int array 轉 double point
時間Tue Aug 29 01:58:58 2017
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Dev C
問題(Question):
剛剛看到一個有點想不通的問題
void Test()
{
int array[]={1,2,3,4,5};
double* a = (double*) (&array[0]);
printf("%d\n",*a);
printf("\n");
}
address value
______
| |
732 | 4 |
|______|
| |
728 | 3 |
|______|
| |
724 | 2 |
|______|
| |
a--> 720 | 1 | <--- array
|______|
因int size = 4, double size = 8
且a指向的type為double
所以應該是要吃到 0x200000001 (address 720~728)
但印出的結果卻是 1
腦袋有點想不太通
懇請大家賜教
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.57.130
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1503943140.A.F27.html
1F:→ Schottky: 因為你在 printf 用 %d ..... 小心點! 這樣用會出事的! 08/29 02:04
2F:→ Schottky: 可以一眼看出來是因為我也出過事 XD 08/29 02:05
3F:→ littleshan: undefined behavior 08/29 02:12
4F:推 chuegou: printf哪裡也要轉型 08/29 08:36
5F:推 Killercat: 你這想法太理所當然 沒考慮endian... XD 08/29 11:43
6F:→ usanhuang: 謝謝大家的解惑 真的完全沒想到跟%d那邊有關 08/29 21:09