国产爱久久久精品_看**视频一一级毛片_91啪国自产中文字幕在线_国内精品伊人久久久久妇

網(wǎng)絡(luò)消費(fèi)網(wǎng) >  5G > > 正文
深入理解void類型
時(shí)間:2021-12-04 10:22:04
1.空指針

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

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

為什么操作系統(tǒng)不是保留一個(gè)字節(jié)呢?由于內(nèi)存管理是按頁(yè)來進(jìn)行的,因此無法做到單獨(dú)保留一個(gè)字節(jié)。盡管如此,但還是有極少數(shù)系統(tǒng)設(shè)定RAM區(qū)從0地址開始,但指向有效變量的指針不會(huì)指向0地址。即使“代碼區(qū)”從0地址開始,但在任何情況下,0地址都不是C語(yǔ)言中任何函數(shù)的起始地址,因此指向有效函數(shù)地址的指針也不會(huì)指向0地址。

?課外知識(shí)延伸

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

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

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

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

2.空指針常量與NULL

標(biāo)準(zhǔn)C規(guī)定,在初始化、賦值或比較時(shí),如果一邊是變量或指針類型的表達(dá)式,則編譯器可以確定另一邊的常數(shù)0為空指針,并生成正確的空指針值。即在指針上下文中“值為0的整型常量表達(dá)式”在編譯時(shí)轉(zhuǎn)換為空指針。

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

#define NULL ((void *)0)

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

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

#define NUL

由此可見,常數(shù)0是一個(gè)空指針常量,而NULL僅僅是它的一個(gè)別名。

3.空指針的用途

一般來說,未初始化是不能使用的非法指針,因?yàn)樗耆锌赡苤赶蛉魏蔚胤剑瑥亩鴮?dǎo)致程序無法判斷它為非法指針。因此,不管指針變量是全局的還是局部的、靜態(tài)的還是非靜態(tài)的,都應(yīng)該在聲明它的同時(shí)進(jìn)行初始化,要么賦予一個(gè)有效的地址,要么賦予NULL。

標(biāo)準(zhǔn)C規(guī)定,全局指針變量的默認(rèn)值為NULL,而對(duì)于局部指針變量則必須明確地指定其初值。因此,void通常用于指針變量的初始化,用來判斷一個(gè)指針的有效性。比如:

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

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

if(pucBuf==0){

return error;//如果pucBuf為空指針,則返回參數(shù)錯(cuò)誤

}

由于void類型指針的不確定性,因此它可以指向任意類型的數(shù)據(jù),那么只要在使用時(shí)做一個(gè)簡(jiǎn)單的強(qiáng)制類型轉(zhuǎn)換就可以了。比如:

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

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

pvData = pcData;//無需進(jìn)行強(qiáng)制類型轉(zhuǎn)換

pcData = (unsigned char*) pvData;//將pvData強(qiáng)制轉(zhuǎn)換為unsigned char類型指針

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

void a;//非法聲明

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

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

4. 用無類型指針作為函數(shù)參數(shù)

由于C語(yǔ)言中最小長(zhǎng)度的變量為char類型(包括unsigned char、signed char等),其sizeof(char)的結(jié)果為1,而其它任何變量的長(zhǎng)度都是它的整數(shù)倍。比如,如果使用SDCC51編譯器,其sizeof(int)為2。因?yàn)橥ㄓ胹wap函數(shù)函數(shù)不知道需要交換的變量的類型,所以需要一個(gè)參數(shù)給出相應(yīng)的指示。由于C語(yǔ)言的變量類型多種多樣,因此不可能為每一種變量類型編號(hào),而且swap并不關(guān)心變量的真正類型,所以可以用變量的長(zhǎng)度代替變量類型。通用swap函數(shù)的原型為:

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

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

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

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

程序清單1.1通用swap排序函數(shù)

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}

關(guān)鍵詞: 深入理解void類

版權(quán)聲明:
    凡注明來網(wǎng)絡(luò)消費(fèi)網(wǎng)的作品,版權(quán)均屬網(wǎng)絡(luò)消費(fèi)網(wǎng)所有,未經(jīng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明"來源:網(wǎng)絡(luò)消費(fèi)網(wǎng)"。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。
    除來源署名為網(wǎng)絡(luò)消費(fèi)網(wǎng)稿件外,其他所轉(zhuǎn)載內(nèi)容之原創(chuàng)性、真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考并自行核實(shí)。
熱文

網(wǎng)站首頁(yè) |網(wǎng)站簡(jiǎn)介 | 關(guān)于我們 | 廣告業(yè)務(wù) | 投稿信箱
 

Copyright © 2000-2020 m.fnsyft.com All Rights Reserved.
 

中國(guó)網(wǎng)絡(luò)消費(fèi)網(wǎng) 版權(quán)所有 未經(jīng)書面授權(quán) 不得復(fù)制或建立鏡像
 

聯(lián)系郵箱:920 891 263@qq.com

備案號(hào):京ICP備2022016840號(hào)-15

營(yíng)業(yè)執(zhí)照公示信息

国产爱久久久精品_看**视频一一级毛片_91啪国自产中文字幕在线_国内精品伊人久久久久妇

        懂色中文一区二区在线播放| 亚洲精品老司机| 亚洲成人激情综合网| 欧美二区三区91| 最新日韩在线视频| 精品一区二区三区视频在线观看| 2020国产精品自拍| 亚洲女与黑人做爰| 欧美日韩免费观看一区二区三区 | jiyouzz国产精品久久| 亚洲另类中文字| 日韩欧美一二三区| 亚洲国产一区二区视频| av一区二区三区在线| 亚洲国产成人高清精品| 久久蜜臀精品av| 六月丁香综合在线视频| 中文字幕不卡的av| 制服丝袜亚洲播放| 亚洲午夜电影在线观看| 91视频一区二区三区| 91久久线看在观草草青青| 亚洲国产高清在线| 国产一区二区三区四| 亚洲欧美国产三级| 久久婷婷色综合| 久久超碰97中文字幕| 成人欧美一区二区三区1314| 91精品国产综合久久福利| 亚洲午夜在线观看视频在线| 97久久人人超碰| 在线区一区二视频| 亚洲九九爱视频| 2021久久国产精品不只是精品| 在线精品视频一区二区三四| 国产精品久久久久久久久久免费看| 国产精品一区免费在线观看| 亚洲欧美成人一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 丝袜亚洲另类欧美综合| 国产精品色一区二区三区| 国产乱子轮精品视频| 一区二区高清视频在线观看| 欧美激情一区二区三区在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久久久久久久久美女| 欧美另类一区二区三区| 五月婷婷欧美视频| 国产精品成人免费在线| 久久青草国产手机看片福利盒子| 精品系列免费在线观看| 亚洲国产成人tv| 亚洲色图.com| 国产亚洲精品超碰| 欧美videofree性高清杂交| 久久国产综合精品| 亚洲高清不卡在线| 亚洲欧美aⅴ...| 日本一区二区三区在线观看| 26uuu亚洲| 粗大黑人巨茎大战欧美成人| 欧美美女直播网站| 日本三级韩国三级欧美三级| 一区二区三区在线视频免费 | 国产色产综合产在线视频| 国产精品2024| 欧美色爱综合网| 日本人妖一区二区| 亚洲一区在线观看网站| 亚洲精品高清在线| 国产精品久久久久影院老司| 国产视频不卡一区| 91亚洲国产成人精品一区二三| 欧美一区二区三区四区高清| 狠狠v欧美v日韩v亚洲ⅴ| 色欧美日韩亚洲| 性久久久久久久久久久久| 亚洲欧美成人一区二区三区| 日韩一区日韩二区| 国产精品嫩草影院av蜜臀| 中文在线资源观看网站视频免费不卡| bt7086福利一区国产| 日韩欧美国产一区二区三区| 国产麻豆日韩欧美久久| 欧美日韩一区二区三区不卡| 久久99深爱久久99精品| 欧美丝袜自拍制服另类| 久久精品国产久精国产爱| 一本到高清视频免费精品| 日韩av电影一区| 婷婷激情综合网| 免费高清不卡av| 欧美亚州韩日在线看免费版国语版| 日本不卡视频一二三区| 欧美亚洲国产一区二区三区va| 青青草视频一区| 一本大道久久a久久综合婷婷| 奇米影视一区二区三区| 欧美在线三级电影| 久久69国产一区二区蜜臀 | 国产一区二区久久| 666欧美在线视频| 岛国精品一区二区| 久久综合九色综合97婷婷女人 | 成人免费在线视频观看| 一区二区三区欧美视频| 亚洲国产一区二区在线播放| 日韩1区2区3区| 欧美日韩日日骚| 成人免费毛片嘿嘿连载视频| 日韩欧美国产电影| 91丨九色丨尤物| 欧美国产亚洲另类动漫| 国产精品女上位| 亚洲一区二区黄色| 日本道精品一区二区三区| 国产一区二区调教| 精品国产乱码久久久久久夜甘婷婷 | 国产成人精品aa毛片| 欧美va日韩va| 久久精品欧美一区二区三区麻豆| 1024成人网| 亚洲最新视频在线播放| 免费成人在线播放| 欧美一区在线视频| 26uuu另类欧美亚洲曰本| 最新成人av在线| 亚洲高清一区二区三区| 国产一区在线精品| 精品国产1区2区3区| 国产精品热久久久久夜色精品三区| 亚洲自拍偷拍网站| 在线免费视频一区二区| 懂色av一区二区三区蜜臀| 久久久久国产精品麻豆ai换脸| 国产精品成人网| 免费一级欧美片在线观看| 制服丝袜亚洲精品中文字幕| 久久理论电影网| 亚洲在线免费播放| 欧美日韩视频第一区| 97成人超碰视| 亚洲精品v日韩精品| 欧亚一区二区三区| caoporn国产精品| 亚洲人成影院在线观看| 色哟哟国产精品| 北岛玲一区二区三区四区| 17c精品麻豆一区二区免费| 色悠悠亚洲一区二区| 成人激情小说乱人伦| 亚洲人午夜精品天堂一二香蕉| 在线观看亚洲a| 91看片淫黄大片一级在线观看| 亚洲综合一区二区三区| 欧美日韩成人综合| 国产日韩一级二级三级| 日韩在线卡一卡二| 日韩欧美国产一区在线观看| 中文字幕制服丝袜一区二区三区 | 一区二区三区欧美日| 欧美美女直播网站| 欧美国产激情一区二区三区蜜月| 日韩vs国产vs欧美| 精品久久久久av影院| 亚洲麻豆国产自偷在线| 国产成人综合自拍| 亚洲三级在线免费| 91麻豆精品国产自产在线观看一区| 欧美经典一区二区三区| 久久国产精品72免费观看| 中文乱码免费一区二区| 在线亚洲免费视频| 国产日本欧美一区二区| 五月综合激情婷婷六月色窝| 精品国产乱码久久久久久图片 | 久久综合99re88久久爱| 婷婷久久综合九色综合伊人色| 欧美va亚洲va国产综合| 一级女性全黄久久生活片免费| 国产精品99久久久久久有的能看| 国产精品动漫网站| 欧洲一区在线电影| 国产精品热久久久久夜色精品三区 | 久久久三级国产网站| 麻豆成人久久精品二区三区红 | 国产日韩欧美激情| 久久99国产精品免费| 日韩毛片视频在线看| 91精品国产色综合久久ai换脸| 亚洲人精品午夜| 波多野结衣中文字幕一区| 三级久久三级久久| 国产精品三级av在线播放| 欧美日韩精品三区| 亚洲啪啪综合av一区二区三区| 成人国产精品免费观看视频| 日韩精品欧美精品| 国产精品乱人伦中文| 欧美一级免费大片|