為何在這里單獨提到空指針類型呢?主要是因為該指針類型很特殊。void類型很容易讓人想到是空的意思,但對于指針而言,其并不是指空,而是指不確定。在很多時候指針在申明的時候可能并不知道是什么類型或者該指針指向的數(shù)據(jù)類型有多種再或者程序員僅僅是想通過一個指針來操作一段內存空間。這個時候可以將指針申明為void類型。但是問題來了,由于void類型原因,對于確定的數(shù)據(jù)類型解引時,編譯器會根據(jù)類型所占的空間來解引相應的數(shù)據(jù),例如int p,那么p就會被編譯器解引為p指針的地址的4個字節(jié)的空間大小。但對于空指針類型來說,編譯器如何知道其要解引的內存大小呢?先看一段代碼:
#include
int main(int argc, char **argv)
{
int a=10;
void *p;
p=&a;
printf("p=%d\n",*p);
return 0;
}
編譯上面的程序會發(fā)現(xiàn),編譯器報錯,無法正常編譯。
這說明編譯器確實是在解引時無法確定*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指針沒有指定類型的指針即指針只有地址數(shù)據(jù)屬性,不具備解引時的空間 大小屬性。
-
指針
+關注
關注
1文章
480瀏覽量
70564 -
void
+關注
關注
0文章
23瀏覽量
9874
發(fā)布評論請先 登錄
相關推薦
評論