繁体   English   中英

C - int数组到char *的转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM