在下面的代码段中,我定义了foo
,它足够容纳32位整数。但是,当我尝试在foo
中存储32位整数时,它不合适。
int8_t * foo = malloc(sizeof(int32_t));
int32_t value = 300;
foo[0] = value;
printf("%i ", foo[0]); // 44
是否有某种方法可以用完更多元素来存储值而不是将其截断?
答案 0 :(得分:4)
foo[0]
的类型为int8_t
,因此它只能容纳1个字节。
尽管可以使用相邻的字节(foo[1], foo[2], foo[3]
),但编译器并不知道您打算仅使用foo[0]
复制所有4个字节。
相反:
*((int32_t*)foo) = 300;
其中说,“假设foo是4字节整数的开头,然后将其赋值为300”。。