作者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/cn.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