【问题标题】:What does "cast to pointer from integer of different size" mean?“从不同大小的整数转换为指针”是什么意思?
【发布时间】:2011-10-17 06:37:05
【问题描述】:

这是我的代码的示例:

void *a = NULL;
void *b = //something;
a = (void *)(*((char *)b + 4));

(b+4) 指向的值是我要存储在 a 中的地址。当我尝试编译时,我得到“警告:从不同大小的整数转换为指针”。这是什么意思,我应该怎么做才能解决它?

编辑:澄清一下,我不希望“a”指向比“b”大 4 个字节的地址。在我的程序中,我知道存储在 ((char *)b + 4) 处的值本身就是另一个指针,我想将此指针存储在 'a' 中。

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    这是char*

    (char *)b + 4
    

    这意味着:

    *((char *)b + 4)
    

    char。然后您继续将 char 转换为 void* 并且编译器会抱怨。您不必在 C 中手动转换为 void*,所以应该这样做:

    a = (char *)b + 4;
    

    cmets 更新:听起来你在追求这个:

    a = *(char **)((char *)b + 4)
    

    【讨论】:

    • 感谢您的澄清。现在我明白我做了什么,但我的目标不是让“a”指向比“b”大 4 个字节的地址。在我的程序中,我知道存储在 ((char *)b +4) 处的值本身就是另一个指针,我想将此指针存储在 'a' 中。
    • @David:请看我的更新,如果我理解你的话,我想这就是你所追求的。
    • 好的,谢谢!我假设 (char **) 表示它是指向指针的指针?我对 C 语言还是很陌生,所以处理指针让我感到困惑。
    【解决方案2】:

    如果你把语句分开写,它会提高可读性 我为你做了这个并得到:

    char *c = (char *)b;
    char *d = c + 4;
    a = (void *)
            (*d); // <- this is c char and you want to cast it to a pointer
    

    好像你写的星号太多了

    【讨论】:

      【解决方案3】:

      听起来像:你的指针有问题。

      在这种情况下,请重新检查您的表达方式:这真的是 char 的地址吗?

      (void *)(*((char *)b + 4));
      

      所以

      (char *)b
      

      是指向char的指针,原样

      (char *)b+4
      

      但是*((char *)b+4) 正在取消引用(char *)b+4,所以这是char 类型——然后你试图将那个可能是1 字节的东西转换成4 或8 字节的地址。因此,尺寸不匹配。

      【讨论】:

        【解决方案4】:
        void *a = NULL;
        char jig[10]="jigarkumar";
        void *b = jig;
        printf("b is %p",b);
        a = (void *)(((char *)b + 4));
        printf("\na is %p",a);
        

        问题来了

        a = (void *)(*((char *)b + 4));
                     ^
                     |
        

        this * 获取存储在 b+4 地址的值并将其分配给错误的 a 所以只需删除它,您的代码就可以正常工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-04
          • 2012-11-12
          • 1970-01-01
          相关资源
          最近更新 更多