【发布时间】:2015-10-15 19:24:00
【问题描述】:
#include<stdio.h>
int main(void)
{
int arr[3] = {2, 3, 4};
char *p;
p = (char*)arr;
printf("%d", *(int*)(p+1));
return 0;
}
我在指针上做这个问题。我希望输出是一些垃圾值,因为从 char* 转换为 int* 但输出总是 50331648,这很奇怪。请解释
编辑:我在某个网站上看到了这个输出问题,所以需要根据给定的说明输出
【问题讨论】:
-
P 是 char*,arr 是 int。
-
@user2653926,是的,这是一个问题,因为
(p + 1)可能与int *不对齐 -
这能编译吗?您不能将
int的地址分配给 char 指针。 -
@machine_1 NO :)),因为 来自不兼容的指针类型的赋值
-
你想解释什么?您正在调用未定义的行为,这就是您得到的。如果您想要“幕后”的解释,请检查阵列的内存转储。