為何在這里單獨提到空指針類型呢?主要是因為該指針類型很特殊。void類型很容易讓人想到是空的意思,但對于指針而言,其并不是指空,而是指不確定。在很多時候指針在申明的時候可能并不知道是什么類型或者該指針指向的數據類型有多種再或者程序員僅僅是想通過一個指針來操作一段內存空間。這個時候可以將指針申明為void類型。但是問題來了,由于void類型原因,對于確定的數據類型解引時,編譯器會根據類型所占的空間來解引相應的數據,例如int p,那么p就會被編譯器解引為p指針的地址的4個字節的空間大小。但對于空指針類型來說,編譯器如何知道其要解引的內存大小呢?先看一段代碼:
#include
int main(int argc, char **argv)
{
int a=10;
void *p;
p=&a;
printf("p=%d\n",*p);
return 0;
}
編譯上面的程序會發現,編譯器報錯,無法正常編譯。

這說明編譯器確實是在解引時無法確定*p
的大小,因此這里必須告訴編譯器p的類型或者*p的大小,如何告訴呢?很簡單,用強制類型轉換即可,如下:
*(int*)p
這樣上面的程序就可以寫為如下:
#include
int main(int argc, char **argv)
{
int a=10;
void *p;
p=&a;
printf("p=%d\n",*(int*)p);
return 0;
}

void指針沒有指定類型的指針即指針只有地址數據屬性,不具備解引時的空間 大小屬性。
-
指針
+關注
關注
1文章
484瀏覽量
70987 -
void
+關注
關注
0文章
23瀏覽量
10038
發布評論請先 登錄
【設計技巧】指針的使用注意事項:空指針、指針賦值、void *指針
什么是void指針?void指針有何功能
C語言void及void指針深層探索
深入了解void指針背后的機理
淺談void 型指針的高階用法

void 型指針的高階用法,你掌握了嗎?

STM32編程:void指針高階用法舉例,設計一個通用掉電存儲子系統

STM32編程:void指針高階用法

C語言-void類型作為萬能指針類型
指針長度簡述

評論