久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

C 語言中 void* 詳解及應用

void 在英文中作為名詞的解釋為 “空虛、空間、空隙”,而在 C 語言中,void 被翻譯為“無類型”,相應的void * 為無類型指針”。

void 似乎只有”注釋”和限制程序的作用,當然,這里的”注釋”不是為我們人提供注釋,而是為編譯器提供一種所謂的注釋。


void 的作用

1.對函數返回的限定,這種情況我們比較常見。

2.對函數參數的限定,這種情況也是比較常見的。

一般我們常見的就是這兩種情況:

  • 當函數不需要返回值值時,必須使用void限定,這就是我們所說的第一種情況。例如:void func(int a,char *b)。
  • 當函數不允許接受參數時,必須使用void限定,這就是我們所說的第二種情況。例如:int func(void)。

void 指針的使用規則

1. void 指針可以指向任意類型的數據,就是說可以用任意類型的指針對 void 指針對 void 指針賦值。例如:

int *a;  void *p;  p=a;

如果要將 void 指針 p 賦給其他類型的指針,則需要強制類型轉換,就本例而言:a=(int *)p。在內存的分配中我們可以見到 void 指針使用:內存分配函數 malloc 函數返回的指針就是 void * 型,用戶在使用這個指針的時候,要進行強制類型轉換,也就是顯式說明該指針指向的內存中是存放的什么類型的數據 (int *)malloc(1024) 表示強制規定 malloc 返回的 void* 指針指向的內存中存放的是一個個的 int 型數據。

2. 在 ANSI C 標準中,不允許對 void 指針進行一些算術運算如 p++ 或 p+=1 等,因為既然 void 是無類型,那么每次算術運算我們就不知道該操作幾個字節,例如 char 型操作 sizeof(char) 字節,而 int 則要操作 sizeof(int) 字節。而在 GNU 中則允許,因為在缺省情況下,GNU 認為 void * 和 char * 一樣,既然是確定的,當然可以進行一些算術操作,在這里sizeof(*p)==sizeof(char)。

void 幾乎只有”注釋”和限制程序的作用,因為從來沒有人會定義一個 void 變量,讓我們試著來定義:

void a;

這行語句編譯時會出錯,提示“illegal use of type ‘void'”。即使 void a 的編譯不會出錯,它也沒有任何實際意義。

眾所周知,如果指針 p1 和 p2 的類型相同,那么我們可以直接在 p1 和 p2 間互相賦值;如果 p1 和 p2 指向不同的數據類型,則必須使用強制類型轉換運算符把賦值運算符右邊的指針類型轉換為左邊指針的類型。

float *p1;  int *p2;  p1 = p2;  //其中p1 = p2語句會編譯出錯,  //提示“'=' : cannot convert from 'int *' to 'float *'”,必須改為:  p1 = (float *)p2;

而 void * 則不同,任何類型的指針都可以直接賦值給它,無需進行強制類型轉換。

void *p1;  int *p2;  p1 = p2;

但這并不意味著,void * 也可以無需強制類型轉換地賦給其它類型的指針。因為”無類型”可以包容”有類型”,而”有類型”則不能包容”無類型”。

小心使用 void 指針類型:

按照 ANSI(American National Standards Institute) 標準,不能對 void 指針進行算法操作,即下列操作都是不合法的:

void * pvoid;  pvoid++; //ANSI:錯誤  pvoid += 1; //ANSI:錯誤  //ANSI標準之所以這樣認定,是因為它堅持:進行算法操作的指針必須是確定知道其指向數據類型大小的。  //例如:  int *pint;  pint++; //ANSI:正確

pint++ 的結果是使其增大 sizeof(int)。

但是 GNU 則不這么認定,它指定 void * 的算法操作與 char * 一致。因此下列語句在 GNU 編譯器中皆正確:

pvoid++; //GNU:正確  pvoid += 1; //GNU:正確

pvoid++ 的執行結果是其增大了 1。

在實際的程序設計中,為迎合 ANSI 標準,并提高程序的可移植性,我們可以這樣編寫實現同樣功能的代碼:

void * pvoid;  ((char *)pvoid)++; //ANSI:錯誤;GNU:正確  (char *)pvoid += 1; //ANSI:錯誤;GNU:正確

GNU 和 ANSI 還有一些區別,總體而言,GNU 較 ANSI 更”開放”,提供了對更多語法的支持。但是我們在真實設計時,還是應該盡可能地迎合 ANSI 標準。 如果函數的參數可以是任意類型指針,那么應聲明其參數為void *。

注:void 指針可以任意類型的數據,可以在程序中給我們帶來一些好處,函數中形為指針類型時,我們可以將其定義為 void 指針,這樣函數就可以接受任意類型的指針。如:

典型的如內存操作函數 memcpy 和 memset 的函數原型分別為:

void * memcpy(void *dest, const void *src, size_t len);  void * memset ( void * buffer, int c, size_t num );

這樣,任何類型的指針都可以傳入 memcpy 和 memset 中,這也真實地體現了內存操作函數的意義,因為它操作的對象僅僅是一片內存,而不論這片內存是什么類型(參見 C 語言實現泛型編程)。如果 memcpy 和 memset 的參數類型不是 void *,而是 char *,那才叫真的奇怪了!這樣的 memcpy 和 memset 明顯不是一個”純粹的,脫離低級趣味的”函數!void 的出現只是為了一種抽象的需要,如果你正確地理解了面向對象中”抽象基類”的概念,也很容易理解 void 數據類型。正如不能給抽象基類定義一個實例,我們也不能定義一個 void(讓我們類比的稱 void 為”抽象數據類型”)變量。

原文地址:https://www.cnblogs.com/wuyudong/p/c-void-point.html

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
亚洲人成精品久久久| 国产99精品一区| 国产婷婷精品| 视频二区不卡| av在线资源| 日韩精品看片| 婷婷激情图片久久| 免费观看在线综合| 亚洲毛片在线免费| 国产亚洲久久| 精品久久久亚洲| 午夜av成人| 午夜国产欧美理论在线播放| 蜜桃成人av| 婷婷亚洲五月| 亚洲人成毛片在线播放女女| 日韩精品久久久久久久软件91| 鲁大师精品99久久久| 在线日韩欧美| 蜜臀av免费一区二区三区| 在线亚洲观看| 日本不卡视频一二三区| 在线观看精品| 国产欧美日韩精品一区二区免费 | 久久久精品国产**网站| 国产精品成久久久久| 亚洲va久久| 国产视频一区二| 成人在线黄色| 国产精品久久久免费| 久久精品一区二区三区中文字幕| 日产欧产美韩系列久久99| 久久久水蜜桃av免费网站| 亚洲精品一区二区妖精| 丝袜美腿亚洲色图| 亚洲福利国产| 日韩精品一二三区| 国产欧美一级| 久久九九精品| 欧美一区91| 国内揄拍国内精品久久| 好看的亚洲午夜视频在线| 日本在线成人| 视频在线在亚洲| 日本aⅴ免费视频一区二区三区| 亚洲精品小说| 日韩黄色在线观看| 色在线中文字幕| 亚洲精品在线国产| 日韩黄色大片| 日韩高清三区| 日韩亚洲一区在线| 日韩视频一二区| 日韩网站中文字幕| 日韩精品第二页| 日韩一区三区| 日韩精品欧美精品| 99精品电影| 国产精品调教| 国产精品久久亚洲不卡| 综合日韩av| 日本一区二区三区中文字幕| 日韩欧美三级| 国产探花一区二区| 亚洲欧洲一区| 精品国产亚洲一区二区三区| 亚洲欧美日韩一区在线观看| 精品一区二区三区的国产在线观看| 国产精品日本一区二区不卡视频 | 日韩中文欧美在线| 欧美激情亚洲| 在线国产日韩| 久久久久网站| 美女视频免费精品| 亚洲精品三级| 99久久久久国产精品| 999国产精品| 欧洲激情综合| 另类亚洲自拍| av中文资源在线资源免费观看| 日韩精品不卡一区二区| 日韩av电影一区| 免费日韩一区二区| 黑人精品一区| 国产精品www994| 亚洲一区二区三区在线免费| 久久中文视频| 精品国产乱码久久久| 欧美日一区二区三区在线观看国产免 | 97久久超碰| 欧美激情五月| 中文字幕亚洲精品乱码| 国产亚洲精aa在线看| 欧美+日本+国产+在线a∨观看| 日韩专区在线视频| 极品av在线| 麻豆精品av| 国产精品一线| 日韩精选在线| 视频一区日韩| 免费看精品久久片| 日韩视频一区| 国产精品中文字幕制服诱惑| 国产一区丝袜| 国产精品久久久久久久久免费高清 | 美美哒免费高清在线观看视频一区二区| 日韩激情视频网站| 性欧美长视频| 亚洲精品成人| 国户精品久久久久久久久久久不卡| 亚洲欧美网站| 欧美亚洲激情| 欧洲av一区二区| 日韩精品不卡一区二区| 高清av一区| 日韩成人精品一区二区| 成人在线免费观看91| 国产一区二区三区不卡av| 国产在线不卡一区二区三区| 欧美激情aⅴ一区二区三区| 久久精品超碰| 国产精品一卡| 午夜电影亚洲| 激情五月色综合国产精品| 香蕉人人精品| 欧美日韩国产在线观看网站| 激情综合网站| 免费在线欧美黄色| 日韩精品视频中文字幕| 日韩亚洲精品在线观看| 日韩av中文字幕一区二区| 国产亚洲欧美日韩精品一区二区三区| 日本在线精品| 国产99精品一区| 午夜久久美女| 亚洲人成亚洲精品| 久久国产欧美日韩精品| 麻豆精品蜜桃视频网站| 红杏一区二区三区| 91精品国产福利在线观看麻豆| 欧美日韩一区自拍| 久久久久久久久99精品大| 日韩欧美看国产| 欧美成人综合| 日韩精品一级中文字幕精品视频免费观看 | 国产乱码精品一区二区亚洲| 欧美一级网站| 麻豆久久久久久久| 久久久久久一区二区| 亚洲调教视频在线观看| 免费久久精品视频| 国产欧美一区| 成人久久一区| 在线亚洲一区| 国产乱人伦丫前精品视频 | 青青青国产精品| 欧美黄页在线免费观看| 日韩欧美中文字幕在线视频| 欧美在线看片| 天堂成人免费av电影一区| 日韩久久精品| 黑丝一区二区三区| 97精品久久| 日韩黄色大片网站| 国产亚洲一级| 国产精品极品国产中出| 精品捆绑调教一区二区三区| 国产欧美日韩一级| 精品视频久久| 亚洲欧洲一区二区天堂久久| 久久美女精品| 亚洲va久久久噜噜噜久久| 国产精品a级| 91久久久精品国产| 午夜国产一区二区| 亚洲精品少妇| 国产66精品| 亚洲欧美网站| 欧美精品97| 国产亚洲高清视频| 麻豆传媒一区二区三区| 国产亚洲网站| 国产亚洲一区| 激情综合网站| 国产精品免费看| 黄色亚洲精品| 日本不卡高清| 亚洲a一区二区三区| 亚洲免费观看高清完整版在线观| 国产视频一区欧美| 国产精一区二区| 国产精品色网| 国产一区二区三区不卡av| 三级欧美在线一区| 黄色aa久久| 日本欧美在线| 日韩午夜电影| 精品三级在线观看视频| 视频一区二区三区中文字幕| 麻豆9191精品国产|