類型轉換void*到string


遇到一個類型轉換的問題,當我試圖將void*類型的a轉化為string型的b時,這樣寫:

1 1 void *a;
2 2 string b;
3 3 b = (string)(*a); //錯誤

 

出現如下錯誤:

error: 'void*' is not a pointer-to-object type(void*不是指向對象的類型)

正確代碼:

void *a; string b; b = *(string*)a;

將a先轉化為string的指針然后解引用,賦值給b(對string指針的解引用獲得的當然是string類型)。

揪根問底(C/C++):

  void*表示“空類型指針”,表示:任意類型的指針,或者該指針與一地址值相關,但是不清楚在此地址上的對象的類型。

  不能直接對void*類型解引用,因為不存在void類型的變量。

  void關鍵字表示“空類型”,表示不存在的意思,而非表示任意類型,因此可以用void修飾函數( void a(void); 表示函數無返回值,或者返回值為空 return; ,在函數形參位置表示函數沒有形參),但不能用void修飾變量,也就是不能寫語句 void a; ,不存在類型為void的東西。

  再進一步,為什么不能存在void類型的變量,或者說為什么在面對變量的時候,void就不能表示“任意類型”呢?

  我們知道C/C++是靜態類型的語言,定義變量就會分配內存,然而不同類型的變量所占內存不同,如果定義一個任意類型的變量,如何為其分配內存?

  所以,C、C++中沒有任意類型的變量。但是,所有指針類型的變量,無論是int*、char*、string*、Student*等等,他們的內存空間都是相同的,所以可以定義“任意類型的指針”,指針類型所占的內存與系統的尋址能力有關,例如32位系統占4字節,64位系統占8字節……

 


免責聲明!

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



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