我对将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;
}
答案 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