#include<stdio.h>
int main()
{
int arr[3] = {2, 3, 4};
char *p;
p = arr;
p = (char*)((int*)(p));
printf("%d, ", *p);
p = (int*)(p+1); //............statement 1
printf("%d", *p);
return 0;
}
在上面的代码中,p = (int*)(p+1);
表示字符指针是整型指针的类型转换。因此,当我们取消引用p
时,它会将内容提取到下一个int
大小(2个字节或4个字节,具体取决于编译器)。但是当我在www.indiabix.com上解决这个问题时,他们已经给出了
回答:2,0
如何2, 0
?根据我的分析,答案应该是2, 3
。任何人都可以解释什么是正确答案以及为什么?
答案 0 :(得分:2)
假设int
占用四个字节。
在小端系统中,arr
的内存布局如下:
| | <--- one byte
+---+---+---+---+---+---+---+---+---+---+---+---+
| 2 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 4 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+---+---+---+---+---+
在大端系统中,arr
的内存布局如下:
| | <--- one byte
+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 2 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 4 |
+---+---+---+---+---+---+---+---+---+---+---+---+
在小端系统中,
*p = 2;
*(p+1) = 0;
在大端系统中,
*p = 0;
*(p+1) = 0;
根据您的平台,输出将为:
2 0
或
0 0
您拥有的代码可能意味着混淆。这条线
p = (char*)((int*)(p));
不做该死的事。
该行
p = (int*)(p+1);
具有与以下相同的效果:
p = p+1;