本文以c語(yǔ)言中的指針為例,為大家分析c語(yǔ)言中的指針和常量的作用以及使用方法,閱讀完整文相信大家對(duì)c語(yǔ)言中的指針和常量有了一定的認(rèn)識(shí)。
目前創(chuàng)新互聯(lián)建站已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、五蓮網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。先說(shuō)下什么是常量,常量就是不可變的量,一旦定義該常量,其值在整個(gè)程序生命周期都是不可變的,常量存放在虛擬地址空間的常量區(qū)。
在C語(yǔ)言里面有兩種定義常量的方法。
使用const關(guān)鍵字 ,const 定義的是變量不是常量,只是這個(gè)變量的值不允許改變是常變量,帶有類(lèi)型。編譯運(yùn)行的時(shí)候起作用存在類(lèi)型檢查。
其實(shí)很多時(shí)候我們錯(cuò)誤的以為常量就是const 修飾的變量,這個(gè)說(shuō)法其實(shí)是有瑕疵的。
很多網(wǎng)友在學(xué)習(xí)指針和指針的特性等問(wèn)題上總是會(huì)繞進(jìn)去,其實(shí)不要繞進(jìn)去最重要的一點(diǎn)是 要把握住核心本質(zhì)。
本質(zhì)上是一個(gè)常量,指針用來(lái)說(shuō)明常量的類(lèi)型,表示該常量是一個(gè)指針類(lèi)型的常量。在指針常量中,指針自身的值是一個(gè)常量,不可改變,始終指向同一個(gè)地址。在定義的同時(shí)必須初始化
int num = 5;
int *const p = # // p為一個(gè)常量,擁有常量的屬性。
*p = 70;
int snum = 100;
int *sp = &snum;
p = sp;
聰明的你一定看出上面代碼有個(gè)地方會(huì)報(bào)錯(cuò),是的 p 被我們聲明為一個(gè)指針常量,此時(shí)指針p具有了常量的屬性,其不能在改變指向,但是其指向的值是可以改變的。所以報(bào)錯(cuò)的代碼是p = sp
這句。
常量指針本質(zhì)上是一個(gè)指針,常量表示指針指向的內(nèi)容,說(shuō)明該指針指向一個(gè)“常量”。在常量指針中,指針指向的內(nèi)容是不可改變的,指針看起來(lái)好像指向了一個(gè)常量。
int num = 5;
int const *p = # //常量指針
const int *sp = # //常量指針
*p = 20;
int snum = 100;
p = &snum; //改變指向
sp = &snum;
是不是又發(fā)現(xiàn)上面的代碼有一處報(bào)錯(cuò),你太聰明了,基本搞懂了常量和指針的本質(zhì)。指針p和sp只是申明格式不同,本質(zhì)完全一樣。p被聲明為一個(gè)指針,指向一個(gè)常量。換句話(huà)說(shuō)就是一個(gè)常量的地址存放在指針p中。此時(shí)報(bào)錯(cuò)的就是*p = 20
,因?yàn)槌A渴遣豢勺兊摹?/p>
到這里你基本掌握了常量和指針的關(guān)系,其實(shí)還是很簡(jiǎn)單的,也沒(méi)大家在學(xué)校學(xué)的那么繞。接下來(lái)給大家在介紹一個(gè)進(jìn)階的關(guān)系。
本質(zhì)上是一個(gè)常量,該常量被一個(gè)常量指針指向。也就是說(shuō)一個(gè)常量指針里面放置一個(gè)常量的地址,千萬(wàn)不要多看一眼這句話(huà),你會(huì)被繞進(jìn)去。
const int num = 5; //一個(gè)不可變的常量
const int * const p = # //一個(gè)存放常量地址的常量指針
千萬(wàn)不要繞進(jìn)去了,其實(shí)認(rèn)真理解了上面的指針常量和常量指針的問(wèn)題,這個(gè)問(wèn)題看起來(lái)會(huì)簡(jiǎn)單很多,就是一個(gè)常量,和一個(gè)常量指針。num是一個(gè)不可改變的常量,p只一個(gè)指針,該指針也是不可改變指向的。
指針和常量這個(gè)問(wèn)題在面試中會(huì)被問(wèn)到,好好理解下,同時(shí)有助于你更好的理解指針。
如果在程序中定義了一個(gè)函數(shù),那么在編譯時(shí)系統(tǒng)就會(huì)為這個(gè)函數(shù)代碼分配一段存儲(chǔ)空間,這段存儲(chǔ)空間的首地址稱(chēng)為這個(gè)函數(shù)的地址。而且函數(shù)名表示的就是這個(gè)地址。既然是地址我們就可以定義一個(gè)指針變量來(lái)存放,這個(gè)指針變量就叫作函數(shù)指針變量,簡(jiǎn)稱(chēng)函數(shù)指針。
函數(shù)指針的定義和普通指針不太一樣。函數(shù)返回值類(lèi)型 (* 指針變量名) (函數(shù)參數(shù)列表);
bool(*p)(char, int);
還是很簡(jiǎn)單的,這就知道怎么定義一個(gè)函數(shù)指針變量了,當(dāng)然也有很復(fù)雜的函數(shù)指針變量,面試的時(shí)候面試官可能會(huì)問(wèn)一些變態(tài)的面試題,比如:
int (*(void (*)())0)();
void (*signal(int , void(*)(int)))(int
不過(guò)還是那句話(huà),要把握核心本質(zhì),函數(shù)指針的核心本質(zhì)是:函數(shù)返回值類(lèi)型 (* 指針變量名) (函數(shù)參數(shù)列表);
很多人會(huì)說(shuō),搞這么難干嘛,平時(shí)有使用么?哈哈,還真的經(jīng)常用到,尤其是標(biāo)準(zhǔn)庫(kù)中用的那叫一個(gè)多,比如sort中的比較函數(shù)就是一個(gè)函數(shù)指針。
用指針變量作函數(shù)參數(shù)可以將函數(shù)外部的地址傳遞到函數(shù)內(nèi)部,使得在函數(shù)內(nèi)部可以操作函數(shù)外部的數(shù)據(jù),并且這些數(shù)據(jù)不會(huì)隨著函數(shù)的結(jié)束而被銷(xiāo)毀。
這不得不使我想起一個(gè)經(jīng)典案例,大學(xué)老師一定會(huì)講的,而且當(dāng)時(shí)也是很多同學(xué)一直半解的。
void swap(int a,int b){
int tmp = a;
a = b;
b = tmp;
}
int main(){
int x = 10;
int x = 20;
printf("swap before:%d,%d",x,y);
swap(a,b);
printf("swap after:%d,%d",x,y);
return 0;
}
看完上述內(nèi)容,你們對(duì)c語(yǔ)言中的指針有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱(chēng):c語(yǔ)言中的指針是什么-創(chuàng)新互聯(lián)
分享URL:http://www.rwnh.cn/article12/ddcedc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、定制網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容