从一组字符中获取一个int

时间:2013-11-24 20:46:42

标签: c casting alignment

我有一个50 char s的数组:

char arr[50];

我被告知arr[1]直到arr[4],我需要int

我做了:

int *p = (int *)(arr+1);

return *p;

我被告知这是一个错误。为什么呢?

1 个答案:

答案 0 :(得分:0)

在我的系统上,sizeof(char)=1sizeof(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 */