www.亚洲男人天堂_欧美最顶级的aⅴ艳星_国产精品免费网站_欧美日韩在线一区_欧美床上激情在线观看_日韩av色在线_国产精品亚洲综合天堂夜夜_欧美做爰性生交视频_国产成人高潮免费观看精品_久久天天躁夜夜躁狠狠躁2022_国产美女久久精品香蕉69_亚洲专区在线视频_国产精品夜间视频香蕉_国产成人综合一区二区三区_国产精品69av_岛国av午夜精品

網絡消費網 >  5G > > 正文
深入理解void類型
時間:2021-12-04 10:22:04
1.空指針

一般來說,程序的起始地址是從“代碼區”的0地址開始存放的(注:如果插入一個內存分布圖,則更能說明問題,此處省略),但實際上現代操作系統并非如此,卻保留了從0開始的一塊內存。至于這塊內存到底有有多大,與具體的操作系統有關。如果程序試圖訪問這塊內存,則系統提示異常。

本文引用地址:http://www.eepw.com.cn/article/201611/322491.htm

為什么操作系統不是保留一個字節呢?由于內存管理是按頁來進行的,因此無法做到單獨保留一個字節。盡管如此,但還是有極少數系統設定RAM區從0地址開始,但指向有效變量的指針不會指向0地址。即使“代碼區”從0地址開始,但在任何情況下,0地址都不是C語言中任何函數的起始地址,因此指向有效函數地址的指針也不會指向0地址。

?課外知識延伸

雖然80C51微控制器XDATA區(外部RAM)是從0地址開始的,但只要對保存在0地址中的變量不進行取地址操作(&操作),即可有效地保證指針不會指向0地址。

與此同時,雖然32位ARM7微控制器也是從0地址開始的,但這塊內存僅用于存放中斷向量代碼,而不是程序中的有效變量地址,因此即便用空指針來判斷指針的有效性,其仍然是可行的。

基于此,于是將空指針定義為指向0地址的指針。毫無疑問,任何一種指針類型都有一個特殊的指針值,即空指針。它既不會指向任何對象或函數,也不是任何對象或函數的地址。而未初始化的指針,則完全可能指向任何地方。

由此可見,空指針與未初始化的指針是完全不同的兩個概念。那么,將如何在程序中獲得一個空指針呢?

2.空指針常量與NULL

標準C規定,在初始化、賦值或比較時,如果一邊是變量或指針類型的表達式,則編譯器可以確定另一邊的常數0為空指針,并生成正確的空指針值。即在指針上下文中“值為0的整型常量表達式”在編譯時轉換為空指針。

為了讓程序中的空指針使用更加明確,標準C專門定義了一個標準預處理宏NULL,其值為“空指針常量”,通常為0或(void *)0,即在指針上下文中NULL與0是等價的,而未加修飾的0也是完全可以接受的。由于void *指針的特殊賦值屬性,比如:

#define NULL ((void *)0)

當NULL定義為((void *)0)時,即NULL是可以賦值給任何類型指針的值,它的類型為void*,而不是整數0,因此初始化“FILE *fp = NULL;”是完全合法的。

而為了區分整數0和空指針0,當需要其它類型的0的時候,即使可能工作,但也不能使用NULL,如果這樣處理其格式是錯誤的,這在非指針上下文中是不能工作的。特別地,不能在需要ASCII空字符(NUL)的地方使用NULL。如果確實需要,則可以自定義為:

#define NUL

由此可見,常數0是一個空指針常量,而NULL僅僅是它的一個別名。

3.空指針的用途

一般來說,未初始化是不能使用的非法指針,因為它完全有可能指向任何地方,從而導致程序無法判斷它為非法指針。因此,不管指針變量是全局的還是局部的、靜態的還是非靜態的,都應該在聲明它的同時進行初始化,要么賦予一個有效的地址,要么賦予NULL。

標準C規定,全局指針變量的默認值為NULL,而對于局部指針變量則必須明確地指定其初值。因此,void通常用于指針變量的初始化,用來判斷一個指針的有效性。比如:

unsigned char *pucBuf=(void *)0;//定義pucBuf為unsigned char類型指針并初始化為空指針

如果后續的代碼忘記初始化指針而直接使用的話,則可能造成程序失敗。雖然空指針也是非法指針,但可以通過程序判斷并告訴程序員代碼可能有問題。也就是說,如果一開始就將指針初始化為空指針,則可避免程序異常。比如:

if(pucBuf==0){

return error;//如果pucBuf為空指針,則返回參數錯誤

}

由于void類型指針的不確定性,因此它可以指向任意類型的數據,那么只要在使用時做一個簡單的強制類型轉換就可以了。比如:

unsignned char*pcData = NULL;//定義pcData為unsigned char類型指針

void*pvData;//定義pvData為void類型指針

pvData = pcData;//無需進行強制類型轉換

pcData = (unsigned char*) pvData;//將pvData強制轉換為unsigned char類型指針

顯然不存在void類型的對象,也就是說,當對象為空類型時,其大小為0字節;當對象未確定類型時,那么它的大小也是未確定的,因此不能聲明void類型變量。比如:

void a;//非法聲明

既然上述聲明是非法的,那么,也就不能將sizeof運算符用于void類型。也就意味著,編譯器不知道所指對象的大小,由于指針的算術運算總是基于所指對象的大小的,因此不允許對void指針進行算術運算。

總之,在指針聲明中,void *表示通用指針的類型。如果void作為函數的返回類型,則表示不返回任何值。如果void位于參數列表中,則表示沒有參數。

4. 用無類型指針作為函數參數

由于C語言中最小長度的變量為char類型(包括unsigned char、signed char等),其sizeof(char)的結果為1,而其它任何變量的長度都是它的整數倍。比如,如果使用SDCC51編譯器,其sizeof(int)為2。因為通用swap函數函數不知道需要交換的變量的類型,所以需要一個參數給出相應的指示。由于C語言的變量類型多種多樣,因此不可能為每一種變量類型編號,而且swap并不關心變量的真正類型,所以可以用變量的長度代替變量類型。通用swap函數的原型為:

void swap(void *pvData1, void *pvData2, int iDataSize)

將a,b兩個變量(變量類型必須一樣)的值交換的代碼如下:

swap(&a, &b, sizeof(a));

通用swap排序函數的參考代碼見程序清單1.1。

程序清單1.1通用swap排序函數

1void swap (void *pvData1, void *pvData2, int iDataSize)

2{

3unsigned char *pcData1 = NULL;

4unsigned char *pcData2 = NULL;

5unsigned charucTmp1;

6

7pcData1 = (unsigned char *)pvData1;

8pcData2 = (unsigned char *)pvData2;

9

10do {

11ucTmp1 = *pcData1;

12*pcData1= *pcData2;

13*pcData2= ucTmp1;

14pcData1++;

15pcData2++;

16} while (--iDataSize >0);

17}

關鍵詞: 深入理解void類

版權聲明:
    凡注明來網絡消費網的作品,版權均屬網絡消費網所有,未經授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明"來源:網絡消費網"。違反上述聲明者,本網將追究其相關法律責任。
    除來源署名為網絡消費網稿件外,其他所轉載內容之原創性、真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考并自行核實。
熱文

網站首頁 |網站簡介 | 關于我們 | 廣告業務 | 投稿信箱
 

Copyright © 2000-2020 www.yushuoyun.cn All Rights Reserved.
 

中國網絡消費網 版權所有 未經書面授權 不得復制或建立鏡像
 

聯系郵箱:920 891 263@qq.com

備案號:京ICP備2022016840號-15

營業執照公示信息

www.亚洲男人天堂_欧美最顶级的aⅴ艳星_国产精品免费网站_欧美日韩在线一区_欧美床上激情在线观看_日韩av色在线_国产精品亚洲综合天堂夜夜_欧美做爰性生交视频_国产成人高潮免费观看精品_久久天天躁夜夜躁狠狠躁2022_国产美女久久精品香蕉69_亚洲专区在线视频_国产精品夜间视频香蕉_国产成人综合一区二区三区_国产精品69av_岛国av午夜精品

        欧美高清在线| 国产一区亚洲| 在线视频国内自拍亚洲视频| 久久精品国产第一区二区三区| 国产精品电影在线观看| 国产乱码精品一区二区三| 9色国产精品| 亚洲手机视频| 欧美精品免费在线| 国产精品盗摄一区二区三区| 国产综合精品| 欧美色播在线播放| 久久伊人精品天天| 久久国产精品亚洲va麻豆| 亚洲裸体俱乐部裸体舞表演av| 欧美激情视频在线免费观看 欧美视频免费一| 中文在线资源观看网站视频免费不卡| 国产精品99久久久久久久久久久久| 国产精品国产福利国产秒拍| 欧美色另类天堂2015| 欧美午夜欧美| 午夜一区二区三视频在线观看| 久久久久久色| 国产欧美日韩激情| 久久黄色影院| 蜜臀99久久精品久久久久久软件| 嫩草成人www欧美| 欧美一区二粉嫩精品国产一线天| 欧美日韩亚洲一区二区| 亚洲一区三区在线观看| 性欧美大战久久久久久久久| 国产日韩欧美在线看| 国产精品视频专区| 欧美成人tv| 亚洲高清在线播放| 亚洲成人在线观看视频| 国产精品区免费视频| 国产精品毛片一区二区三区| 欧美日韩你懂的| 翔田千里一区二区| 国产欧美日韩麻豆91| 欧美激情视频一区二区三区不卡| 国产亚洲美州欧州综合国| 午夜激情久久久| 久久国产欧美| 欧美视频在线免费| 久久成人一区| 久久久久久一区二区三区| 国产视频观看一区| 国产一级久久| 亚洲综合色视频| 久久九九国产| 欧美日韩黄色一区二区| 欧美有码在线观看视频| 亚洲自拍偷拍福利| 最新日韩精品| 国产精品裸体一区二区三区| 亚洲成人资源| 欧美色视频在线| 99精品久久免费看蜜臀剧情介绍| 欧美在线观看你懂的| 国产亚洲一本大道中文在线| 悠悠资源网久久精品| 国产精品成人v| 亚洲欧美日韩精品在线| 久久久www免费人成黑人精品| 国产精品国产三级国产普通话三级| 国产精品亚洲精品| 国产精品国产精品国产专区不蜜| 国产精品成人一区二区三区夜夜夜| 国产欧美在线观看| 午夜久久久久久| 激情国产一区二区| 国产精品日韩在线| 久久精品亚洲一区| 亚洲品质自拍| 久久久久久久欧美精品| 999在线观看精品免费不卡网站| 国产精品欧美一区喷水| 国产精品综合av一区二区国产馆| 亚洲一区二区黄| 国产麻豆日韩| 国产麻豆日韩欧美久久| 另类酷文…触手系列精品集v1小说| 国内精品久久久久久久影视麻豆| 国产精品影院在线观看| 欧美成人自拍视频| 亚洲高清av在线| 一区二区三区产品免费精品久久75| 国产伦精品一区二区三区照片91| 91久久在线视频| 欧美黄网免费在线观看| 欧美国产在线电影| 国产精品精品视频| 一区二区三区高清| 一区二区在线观看视频| 欧美日韩国产一区| 亚洲激情六月丁香| 亚洲男女自偷自拍| 欧美mv日韩mv国产网站app| 在线看日韩av| 国内自拍视频一区二区三区| 欧美中文字幕在线视频| 久久成人18免费网站| 亚洲美女电影在线| 麻豆91精品91久久久的内涵| 在线观看视频欧美| 欧美黄在线观看| 一区二区三区四区五区在线| 欧美精品自拍偷拍动漫精品| 欧美色大人视频| 国产精品国产自产拍高清av| 亚洲激情不卡| 欧美亚洲一区二区三区| 在线成人www免费观看视频| 怡红院精品视频在线观看极品| 午夜精品影院在线观看| 欧美va亚洲va国产综合| 西瓜成人精品人成网站| 欧美午夜不卡| 欧美大片免费观看在线观看网站推荐| 午夜在线视频观看日韩17c| 亚洲欧美区自拍先锋| 亚洲一区免费在线观看| 国产精品海角社区在线观看| 欧美黄色片免费观看| 宅男66日本亚洲欧美视频| 精品999在线观看| 欧美一级专区免费大片| 亚洲视频在线观看网站| 国产精品一区二区你懂的| 日韩视频中文字幕| 亚洲系列中文字幕| 亚洲免费中文| 国产精品久久久久7777婷婷| 欧美精品国产| 国产精品一区二区三区四区五区| 亚洲欧美国产三级| 国产精品国产三级国产aⅴ无密码| 国产精品久久久久久av下载红粉| 欧美成人自拍| 亚洲欧美成aⅴ人在线观看| 狠狠色丁香婷婷综合影院| 欧美日韩亚洲成人| 久久精品一区蜜桃臀影院| 欧美 亚欧 日韩视频在线| 美女网站在线免费欧美精品| 亚洲国产欧美一区二区三区丁香婷| 欧美午夜在线一二页| 国产精品一卡二卡| 亚洲午夜精品国产| 国产精品视频1区| 欧美日韩一区在线观看| 免费成人黄色片| 麻豆久久婷婷| 黑人巨大精品欧美一区二区小视频| 一区二区三区日韩欧美| 久久九九有精品国产23| 欧美精品一区二区三区久久久竹菊| 亚洲欧美电影院| 亚洲精品视频啊美女在线直播| 麻豆国产va免费精品高清在线| 在线观看91精品国产入口| 久久久综合免费视频| 午夜精品久久久久久久99黑人| 欧美激情中文字幕乱码免费| 亚洲一区尤物| 欧美成人自拍视频| 亚洲福利在线看| 亚洲自拍电影| 国产精品美女久久久久久免费| 91久久一区二区| 国产精品v一区二区三区| 国产精品欧美日韩久久| 欧美日韩欧美一区二区| 在线观看日韩欧美| 亚洲国产高清aⅴ视频| 国产一区二区福利| 国产精品久久久久免费a∨大胸| 99精品欧美一区二区三区综合在线| 一区在线电影| 亚洲精品自在在线观看| 黄色一区二区在线观看| 国内揄拍国内精品少妇国语| 蜜桃精品久久久久久久免费影院| 国产精品人人做人人爽| 亚洲精品乱码久久久久久久久| 欧美日本免费一区二区三区| 一区二区欧美在线观看| 欧美激情视频一区二区三区免费| 亚洲视频中文| 久久精品av麻豆的观看方式| 欧美激情视频一区二区三区在线播放| 国产精品毛片va一区二区三区| 亚洲国产第一| 在线免费观看日韩欧美| 亚洲国产合集| 国产色爱av资源综合区| 在线性视频日韩欧美| 国产女主播一区二区| 欧美精品在欧美一区二区少妇| 极品中文字幕一区| 欧美日韩国产在线看| 美女精品视频一区| 亚洲国产精品传媒在线观看| 久久嫩草精品久久久精品| 欧美亚洲免费高清在线观看| 亚洲欧美日韩国产另类专区| 欧美成人午夜激情视频| 欧美成人精品在线观看| 久热国产精品视频| 在线观看国产欧美| 国产精品一区二区三区观看| 一区二区三区在线观看视频| 亚洲女同在线| 亚洲国产一区在线观看| 亚洲高清在线精品| 老司机精品久久| 中文在线资源观看网站视频免费不卡| 欧美精品自拍| 欧美岛国激情| 欧美第一黄色网| 亚洲欧洲精品一区二区精品久久久| 欧美久久久久| 欧美三级乱人伦电影| 玖玖国产精品视频| 久久成人免费视频| 亚洲婷婷国产精品电影人久久| 欧美成人国产| 亚洲电影第1页| 国产女人水真多18毛片18精品视频| 欧美日韩中文在线观看| 欧美体内she精视频| 在线看片一区| 欧美系列电影免费观看| 久久av最新网址| 黄色在线一区| 女人香蕉久久**毛片精品| 久久国产乱子精品免费女| 欧美激情视频免费观看| 国产区在线观看成人精品| 国产精品丝袜xxxxxxx| 欧美福利电影在线观看| 在线播放不卡| 亚洲一区二区日本| 国产精品高潮在线| 牛牛影视久久网| 国产亚洲成精品久久| 一区二区三区在线不卡| 国内精品免费在线观看| 免费欧美视频| 亚洲高清久久网| 国产精品家庭影院| 亚洲欧美日韩天堂| 伊人成综合网伊人222| 国产精品久久久久久久久果冻传媒| 久久久91精品| 久久久爽爽爽美女图片| 亚洲免费av观看| 欧美三级电影大全| 久久精品亚洲精品国产欧美kt∨| 亚洲午夜久久久久久尤物| 亚洲在线视频免费观看| 欧美性大战久久久久久久| 国产欧美日韩精品a在线观看| 亚洲精品国产精品乱码不99按摩| 欧美另类99xxxxx| 99视频国产精品免费观看| 欧美性理论片在线观看片免费| 久久亚裔精品欧美| 国产精品丝袜久久久久久app| 亚洲网在线观看| 性欧美办公室18xxxxhd| 国内一区二区三区在线视频| 国产精品嫩草影院一区二区| 亚洲国产一区二区在线| 亚洲青色在线| 亚洲老板91色精品久久| 国产人妖伪娘一区91| 久久精品国产一区二区电影| 久久久久久久尹人综合网亚洲| 亚洲高清影视| 亚洲天堂av电影| 欧美日本乱大交xxxxx| 一区二区日韩免费看| 亚洲午夜激情在线| 99pao成人国产永久免费视频| 国产精品三级久久久久久电影| 9l国产精品久久久久麻豆| 在线视频日韩精品| 亚洲高清一区二区三区| 六月婷婷一区| 国产日韩精品在线观看| 国产精品theporn88| 欧美日本视频在线| 久久国产加勒比精品无码| 欧美一区二区在线视频| 欧美一级电影久久| 久久久久久亚洲精品中文字幕| 欧美另类一区二区三区| 午夜精品久久一牛影视| 玖玖精品视频| 欧美日韩第一区日日骚| 欧美日韩国产一区| 一区二区三区.www| 欧美精品在线一区| 久久亚洲综合| 欧美日韩国产一区二区| 一个色综合导航| 欧美精品一区二区高清在线观看| 国产一区二区精品久久99| 激情成人中文字幕| 午夜视频精品| 亚洲精品一线二线三线无人区| 欧美性生交xxxxx久久久| 亚洲精品少妇| 一区二区冒白浆视频| 黄色日韩网站视频| 久久免费国产精品1| 欧美精品日韩精品| 国产精品麻豆va在线播放| 国产精品一区在线观看| 欧美日韩在线第一页| 欧美性天天影院| 一区视频在线播放| 国产在线不卡精品| 亚洲美女电影在线| 精品999在线观看|