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:06 编辑
gcc 扩展,不要这个属性可以用 gcc -pedantic-errors memcpy中参数也void *的, 很正常, 库代码也是这样使用的, :lol 回复 2# xinglp
谢谢!
我也感觉这个挺好用的:P 回复 3# wlmqgzm
wlmqgzm 发表于 2016-06-02 19:30 static/image/common/back.gif
memcpy中参数也void *的, 很正常, 库代码也是这样使用的,
?????????
参数是void *,就代表能++了?
页:
[1]