#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
。谁能解释什么是正确答案,为什么?
假设anint
需要四个字节。
在小端系统中,的内存布局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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句