yaoyefengyun 发表于 2016-06-02 17:13

void * ++ 的问题

本帖最后由 yaoyefengyun 于 2016-06-02 17:14 编辑

我写了如下一段代码:#include <stdio.h>

int main(void)
{
      void *p;
      int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

      p = array;
      p += 4;
      printf("%d\n", *(int *)p);

      return 0;
}gcc tets.c -Wall 未报错,然后我又下载了clang, clang test.c -Wall 也未报错
输出结果为:1
环境为fedora23,gcc-5.3.1,clang-3.7.0

我记得void * 因为不知道指向的变量类型,是不能直接进行加减运算的吧,但从输出结果上来看指针p似乎是按一个字节进行偏移,这是编译器本身的扩展,还是c99或c11的新规定呢?
其实我最关心的还是其它编译器是不是大多也这么实现,如果是,我打算以后直接这么用了,简单方便。

xinglp 发表于 2016-06-02 19:04

本帖最后由 xinglp 于 2016-06-02 19:06 编辑

gcc 扩展,不要这个属性可以用 gcc -pedantic-errors

wlmqgzm 发表于 2016-06-02 19:30

memcpy中参数也void *的, 很正常, 库代码也是这样使用的,   :lol

yaoyefengyun 发表于 2016-06-03 00:26

回复 2# xinglp
谢谢!

   

yaoyefengyun 发表于 2016-06-03 00:26

我也感觉这个挺好用的:P 回复 3# wlmqgzm


   

yshwuxian 发表于 2016-06-06 16:21

wlmqgzm 发表于 2016-06-02 19:30 static/image/common/back.gif
memcpy中参数也void *的, 很正常, 库代码也是这样使用的,

?????????

参数是void *,就代表能++了?
页: [1]
查看完整版本: void * ++ 的问题