我有一个50 char
s的数组:
char arr[50];
我被告知arr[1]
直到arr[4]
,我需要int
。
我做了:
int *p = (int *)(arr+1);
return *p;
我被告知这是一个错误。为什么呢?
答案 0 :(得分:0)
在我的系统上,sizeof(char)=1
,sizeof(int)=4
。
问题的根源在于您正在转换为指向int (int *)
的指针,该指针掩盖了基础类型char
的真正对齐方式。假设一个4字节的int,编译器尝试访问4个字节而不是1个。
假设:
char arr[] = "ABCDEFGHI";
然后你的代码产生:
int *p = (int *)(arr+1); /* *p = 1162101570, interpreting "BCDE" as int */
为了利用C的自动类型转换,你需要更像这样的东西:
int p = (int)(*(arr+1)); /* p = 66, the ASCII code for 'B' */
或者,根据原始arr
声明
int p = (int)arr[1]; /* p = 66 */
但实际上,这就是你所需要的:
int p = arr[1]; /* p = 66 */