• 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. 暂留
  • 相关阅读:
    图标字体IcoMoon 使用
    JS 寻找孩子并打印路径
    为什么要用on()而不直接使用click
    setTimeout 虚假的“异步”
    解决Ajax.BeginForm还是刷新页面的问题
    .net生成Excel,并下载
    C#判断文件是否正在被使用
    sql为数字添加千分位(也就是钱的格式)
    HotelIInventory项目小结
    一步一步实现FormsAuthentic验证登录
  • 原文地址:https://www.cnblogs.com/CoolSummer/p/3205679.html
Copyright © 2020-2023  润新知