[英]C - int array to char* 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;
}
uint32的大小是32位,或4个字节。 当你执行(char*)array+8
,将数组转换为char数组,并取第八个字符。 这里,第八个字符包含整数23
的开头,它适合于char。
*p = *((char*)array+8*sizeof(uint32_t)
要移动到示例中的数组[8],您只需向前移动8个字节
如果你考虑一下,你已经将数组转换为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.