為何在這里單獨(dú)提到空指針類型呢?主要是因?yàn)樵撝羔橆愋秃芴厥狻oid類型很容易讓人想到是空的意思,但對于指針而言,其并不是指空,而是指不確定。在很多時候指針在申明的時候可能并不知道是什么類型或者該指針指向的數(shù)據(jù)類型有多種再或者程序員僅僅是想通過一個指針來操作一段內(nèi)存空間。這個時候可以將指針申明為void類型。但是問題來了,由于void類型原因,對于確定的數(shù)據(jù)類型解引時,編譯器會根據(jù)類型所占的空間來解引相應(yīng)的數(shù)據(jù),例如int p,那么p就會被編譯器解引為p指針的地址的4個字節(jié)的空間大小。但對于空指針類型來說,編譯器如何知道其要解引的內(nèi)存大小呢?先看一段代碼:
#include
int main(int argc, char **argv)
{
int a=10;
void *p;
p=&a;
printf("p=%d\n",*p);
return 0;
}
編譯上面的程序會發(fā)現(xiàn),編譯器報錯,無法正常編譯。
這說明編譯器確實(shí)是在解引時無法確定*p
的大小,因此這里必須告訴編譯器p的類型或者*p的大小,如何告訴呢?很簡單,用強(qiáng)制類型轉(zhuǎn)換即可,如下:
*(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ù)屬性,不具備解引時的空間 大小屬性。
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關(guān)推薦
函數(shù)指針在Linux內(nèi)核和C語言開發(fā)中用的非常多,而且在設(shè)計操作系統(tǒng)的時候也會用到,因此這里將詳細(xì)講解函數(shù)指針。既然函數(shù)指針也是指針,那函數(shù)指針
發(fā)表于 09-09 08:56
?1955次閱讀
的類型多么復(fù)雜,比如一個特別大的結(jié)構(gòu)體,它的指針和一個 char型指針的大小本質(zhì)上是一樣的,因?yàn)?b class='flag-5'>指針就是起始地址。 正式由于這個原因,(void )型
發(fā)表于 08-20 08:30
[導(dǎo)讀] 要比較靈活的使用C語言實(shí)現(xiàn)一些高層級的框架時,需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ARM 8.40.1什么是void指針
發(fā)表于 02-21 06:01
1.概述 本文將對void關(guān)鍵字的深刻含義進(jìn)行解說,并詳述void及void指針類型的使用方法與技巧。 2.void的含義
發(fā)表于 09-21 11:36
?166次下載
當(dāng)使用關(guān)鍵字void聲明指針變量時,它將成為通用指針變量。任何數(shù)據(jù)類型(char,int,float等)的任何變量的地址都可以賦值給void指針
發(fā)表于 05-06 09:49
?1343次閱讀
要比較靈活的使用C語言實(shí)現(xiàn)一些高層級的框架時,需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ARM 8.40.1 什么是void指針
發(fā)表于 08-09 15:54
?1608次閱讀
關(guān)注+星標(biāo)公眾號,不錯過精彩內(nèi)容轉(zhuǎn)自 | 嵌入式客棧要比較靈活的使用C語言實(shí)現(xiàn)一些高層級的框架時,需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ...
發(fā)表于 12-02 12:36
?8次下載
[導(dǎo)讀] 要比較靈活的使用C語言實(shí)現(xiàn)一些高層級的框架時,需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ARM 8.40.1什么是void指針
發(fā)表于 12-27 18:47
?10次下載
[導(dǎo)讀] 要比較靈活的使用C語言實(shí)現(xiàn)一些高層級的框架時,需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR fo...
發(fā)表于 02-07 11:14
?2次下載
空類型`。 void abc; //這是錯誤的 但是`void`是可以定義指針的,`void*`表示萬能型指針類型,可以與任何
發(fā)表于 08-14 10:04
?1747次閱讀
我們使用這樣的方式來定義一個指針: Type *p; 我們說 p是指向type類型的指針 ,type可以是任意類型,除了可以是char,short, int, long等基本類型外,還可以是指針類型
發(fā)表于 09-29 18:42
?4029次閱讀
void *表示一個“不知道類型”的指針,也就不知道從這個指針地址開始多少字節(jié)為一個數(shù)據(jù)。和用int表示指針異曲同工,只是更明確是“指針”。
發(fā)表于 02-02 17:18
?1513次閱讀
C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因?yàn)樗鼈兌际峭环N類型*類型的。C語言是強(qiáng)類型的語言,對類型的區(qū)分十分嚴(yán)格,不同的類型占據(jù)的空間大小不同,地址偏移量也會不
發(fā)表于 02-13 15:02
?1351次閱讀
普通類型指針,包含兩個方面,一個是指向此類型變量的地址,另外一個是指向變量的長度。
發(fā)表于 03-14 14:44
?823次閱讀
首先void*中的void代表一個任意的數(shù)據(jù)類型,"星號"代表一個指針,所以其就是一個任意數(shù)據(jù)類型的指針。
發(fā)表于 03-30 15:01
?4098次閱讀
評論