【发布时间】:2012-10-01 07:37:40
【问题描述】:
我有以下代码
int main()
{
int arr[3] = {2, 3};
char *p;
p = arr;
p = (char *)((int*)(p));
printf("%d, ", *p);
p++;
p = (int*)(p+1);
printf("%d", *p);
return 0;
}
o/p-2,0
但我想知道它是如何在第二个 printf 中打印 0 的,我知道关于 little-endian 的所有内容,就像在内存中一样 4 byte integer 这些元素是如何存储的,如下
00000010 00000000 0000000 00000000 00000011 00000000 00000000 00000000
所以,在第一个 printf 我们得到 2 作为答案,但在第二个 printf 指针位于 second byte 这是 0 但它现在是一个整数指针,但它如何打印 0,因为它必须检查最多 4 个字节的内存,然后它必须打印最多 4 个字节的整个数据。
我认为它将打印 3 作为最多 4 个字节。
我想要的是整数数据是如何通过 printf 打印的,谁能告诉这个。
【问题讨论】:
-
p 始终是一个字符指针!
-
感谢您的回答,但是那里的 (int *) 有什么用处。请告诉。
-
(int*) 强制转换是不必要的(错误?),因为 p 和 p+1 已经是赋值兼容的。特别是,它甚至会发出警告(“来自不兼容的指针类型的赋值”)。如果你有类似
int* i; ... i = p + 1;
标签: c