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. 暫留


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM