一道面試題教你輕松玩轉(zhuǎn)C++指針
提到指針,真是讓人頭皮發(fā)麻,今天筆者來(lái)帶你玩轉(zhuǎn)指針。
話不多說(shuō)先看這道面試題 (注意細(xì)節(jié))
int main()
{
char *c[] = {"ENTER","NEW","POINT","FIRST"};
char**cp[] = {c+3,c+2,c+1,c};
char***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
是不是看著看著就迷糊了,沒(méi)關(guān)系,咱們畫(huà)圖來(lái)談個(gè)究竟。

這樣一來(lái)看起來(lái)是不是明顯多了,但還是要仔細(xì)分析才能保證萬(wàn)無(wú)一失。
第一次打印
先進(jìn)行++p再進(jìn)行兩次解引用.見(jiàn)下圖可知我們打印 POINT

第二次打印
先進(jìn)行 ++CPP 然后解引用 再進(jìn)行 -- 操作將C+1改變?yōu)镃 接著再一次解引用 最后+3
我們這里打印結(jié)果是 ER

第三次打印
我們先進(jìn)行CPP[-2]的操作,即相當(dāng)于 *(CPP-2)但也要注意這里我們CPP的值并未發(fā)生改變
在這里我們(CPP-2)的指向用黑線表示,然后再一次解引用,最后+3,此時(shí)指向了圖中ST
所以我們這里打印ST

第四次打印
CPP[-1]即 *(CPP-1) 這里的CPP[-1][-1] 即相當(dāng)于*( *(CPP-1)-1 ) 最后+1指向EW

最后我們運(yùn)行程序來(lái)看看結(jié)果

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語(yǔ)言數(shù)據(jù)的存儲(chǔ)和取出詳細(xì)講解
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)的存儲(chǔ)和取出詳細(xì)講解,作者使用圖文代碼實(shí)例講解,有感興趣的同學(xué)可以學(xué)習(xí)研究下2021-02-02
C++詳細(xì)講解模擬實(shí)現(xiàn)位圖和布隆過(guò)濾器的方法
位圖(bitset)是一種常用的數(shù)據(jù)結(jié)構(gòu),常用在給一個(gè)很大范圍的數(shù),判斷其中的一個(gè)數(shù)是不是在其中。在索引、數(shù)據(jù)壓縮方面有很大的應(yīng)用。布隆過(guò)濾器是由布隆提出的,它實(shí)際上是一個(gè)很長(zhǎng)的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過(guò)濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中2022-06-06
c++連接mysql5.6的出錯(cuò)問(wèn)題總結(jié)
下面小編就為大家?guī)?lái)一篇c++連接mysql5.6的出錯(cuò)問(wèn)題總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦2016-12-12
關(guān)于c語(yǔ)言中回調(diào)函數(shù)的理解
這篇文章主要給大家介紹了關(guān)于c語(yǔ)言中回調(diào)函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
C語(yǔ)言實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)操作
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08

