【问题标题】:C - int array to char* conversionC - int 数组到 char* 的转换
【发布时间】:2017-08-30 08:36:01
【问题描述】:

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

【问题讨论】:

标签: c arrays pointers type-conversion


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    *p = *((char*)array+8*sizeof(uint32_t)
    

    移动到数组[8] 在您的示例中,您仅向前移动 8 个字节

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2012-05-06
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 2014-03-02
        • 2010-10-21
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多