为什么指针还要有类型区分?解决方案

为什么指针还要有类型区分?
根本意义是不是在于指针运算时的偏移?
type*类型指针会偏移sizeof(type)

既然是这样为什么gcc会允许void*类型指针进行++之类的运算?
void*类型指针在进行++运算时偏移多少呢?

以下这段代码gcc编译通过,但结果不是所期望的

#include   <stdio.h>

int
main()
{
                  int*   ip   =   (int*)calloc(sizeof(int),   9);
                  int   i;
  void*   vp   =   ip;
 
                  for(i   =   0;   i   <   9;   ++i)
                {
                              ip[i]   =   i;
                }

  for(i   =   0;   i   <   9;   ++i)
{
  printf( "%d\n ",   *(int*)vp);
++vp;
}
               
                free(ip);
}




------解决方案--------------------
VC8 无法编译过去
------解决方案--------------------
g++编译
error: ISO C++ forbids incrementing a pointer of type `void* '
------解决方案--------------------
int *p;
p++的时候
是不应该知道偏移量
字符形和整形所要移动的大小是不一样的
------解决方案--------------------
void*不能参加加法运算。
------解决方案--------------------
C好像可以的。
------解决方案--------------------
C好像也不行,但是GCC下确实编译通过了。
------解决方案--------------------
vc6.0
error C2036: 'void * ' : unknown size
------解决方案--------------------
类型才能知道怎么解释数据
------解决方案--------------------
gcc可以,不过g++不行。。。
------解决方案--------------------

9---00000000 000000000 00000000 00001001
8---00000000 000000000 00000000 00001000
7---00000000 000000000 00000000 00000111
6---00000000 000000000 00000000 00000110
5---00000000 000000000 00000000 00000101
4---00000000 000000000 00000000 00000100
3---00000000 000000000 00000000 00000011
2---00000000 000000000 00000000 00000010
1---00000000 000000000 00000000 00000001
/|\second
0---00000000 000000000 00000000 00000000
低 /|\ start


开始时指针指向1的右边,所以输出0,使用%d输出时就从指针开始处往右找4个字节输出.
接着,你用vp++,指针往左移一个字节second位置,再输出4个字节.依此类推.
输出
0
16777216
65536
256
1
33554432
131072
512
2
因此你的的vp++改成vp+=sizeof(int)就可以了
再linux中,内存的分配是从低往高处增长的.


------解决方案--------------------
怎么不对行呀,second应该在00000001的最左边
------解决方案--------------------

9---00000000 000000000 00000000 00001001
8---00000000 000000000 00000000 00001000