C++中void型指针

问题由来:

PX_FORCE_INLINE    void*    operator new(size_t size, const char* handle, const char * filename, int line)
    { 
    return getSampleAllocator()->allocate(size, handle, filename, line);
    }

在这里可以看到函数返回值是一个void*,也就是void型的指针。

那么void型指针是个什么东西呢?

void型指针所指的内存区域,可以存储任何类型的数据,也可以说是没有数据类型。

直到使用这一块内存的时候,才知道给里面装的是啥数据。

——————————我是你们的老朋友,分割线。————————————

void及void指针含义的深刻解析一文很清楚的说了void类型和void型指针的问题。

下面是个人总结:

  1. void类型表示无类型,从哲学上来说也可以看成是任意类型。
  2. 可以使用任意类型的指针为void型指针赋值,但是不能用void型指针为已知类型的指针赋值。所谓“白马是马,马非白马”。
  3. 函数的参数使用void型指针,表示可以传入任意类型的参数。(爽不?)
  4. void可以看成是一种抽象类型,想想virtual,虚函数、虚基类,他们都是抽象的,是虚的。所以不能实例化一个虚的东西,也就是说不能声明一个void型的变量(注意这里我说的是变量,不是指针)。可以想象成void类型是所有已知类型之上的一个抽象类型。
  5. 既然void类型是抽象的,那么就不能对它进行具体的算数运算,例如void * pvoid; pvoid++; pvoid +=2;都是invalid,指针的++操作是给当前分配的内存空间增大一个单元的空间,可是void类型你都不知道它要存啥,你当然不知道他一个单元要多大,所以就不能做算术运算。
  6. 暂留
posted @ 2013-07-22 17:00  清凉一夏o0  阅读(3377)  评论(0编辑  收藏  举报