C - int数组到char *的转换

时间:2017-08-30 08:36:01

标签: c arrays pointers type-conversion

我对将int数组转换为char*有疑问。以下代码的输出为23。但我真的不明白为什么。有人可以向我解释一下吗?

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int main(){
    uint32_t x;
    uint32_t* p = (uint32_t*) malloc(sizeof(uint32_t));    
    uint32_t array[9] = {42, 5, 23, 82, 127, 21, 324, 3, 8};

    *p = *((char*)array+8);
    printf("1: %d\n", *p);
    return 0;
}

3 个答案:

答案 0 :(得分:6)

uint32的大小是32位,或4个字节。当你执行(char*)array+8时,将数组转换为char数组,并取第八个字符。这里,第八个字符包含整数23的开头,它适合于char。

答案 1 :(得分:4)

*p = *((char*)array+8*sizeof(uint32_t)

移动到数组[8] 在你的例子中,你只向前移动了8个字节

答案 2 :(得分:3)

如果您考虑一下,您已将数组转换为char*。其中sizeof char为1B。 这意味着在这种情况下使用指针算术+8不会将8*sizeof(uint32_t)移动到数组的第九个元素,而只会移动8个字节(8*sizeof(char))。

由于uint32_t有4个字节,因此您已移至第3个元素23的第一个字节。

首先,您必须在uint32_t数组上使用指针算术,然后将其转换为char,如

*p = (char)*(array+8);  // Prints 8