代码之家  ›  专栏  ›  技术社区  ›  Joe

是否可以强制转换到运行时在C中确定的给定类型的指针?

  •  2
  • Joe  · 技术社区  · 14 年前

    我要计算数组的偏移量。我有一个 void * 处理它和 sizeof(element) . 我没有电话 x* 指针(其中 x

    有什么办法可以让我 无效* 指针指向一个给定的大小,这样我就可以根据这个大小做指针运算了?现在我要选一个 char * (假设 char

    *我宁愿不要,因为这并不总是真的。

    3 回复  |  直到 14 年前
        1
  •  4
  •   caf    14 年前

    正如一些人在评论中所说, sizeof(char) 保证为1。C99标准的相关部分见第6.5.3.4节,描述了 sizeof

    当应用于具有 类型 char , unsigned char ,或 signed char ,(或合格版本 大小 运算符]为1。

    这意味着 void * char * N * sizeof(element) 是正确的和惯用的。

        2
  •  2
  •   eruciform    14 年前

    你不能在C语言中进行内省,但这并不妨碍你将任何东西转换成任何东西。

    void *v = whatever;
    char *c = (char*)v;
    c[0] = stuff;
    element *e = (element*)v;
    e[42].foo = bar;
    

    char c[x];
    

    其中x是一个变量,但我不相信它在所有的架构上。

    您完全可以为指针编写几个简单的访问器,以至少分离出指针数学:

    void* pointerAtPos( void*p, int offset, int width )
    {
      return (void*)&( ((char*)p)[ offset * width ] );
    }
    

    当心 address alignment .

        3
  •  0
  •   sizzzzlerz    14 年前