一道面試題教你輕松玩轉(zhuǎn)C++指針
提到指針,真是讓人頭皮發(fā)麻,今天筆者來帶你玩轉(zhuǎn)指針。
話不多說先看這道面試題 (注意細(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; }
是不是看著看著就迷糊了,沒關(guān)系,咱們畫圖來談個(gè)究竟。
這樣一來看起來是不是明顯多了,但還是要仔細(xì)分析才能保證萬無一失。
第一次打印
先進(jìn)行++p再進(jì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)行程序來看看結(jié)果
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(24.成對交換節(jié)點(diǎn))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(24.成對交換節(jié)點(diǎn)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言中建立和刪除文件連接的相關(guān)函數(shù)講解
這篇文章主要介紹了C語言中建立和刪除文件連接的相關(guān)函數(shù)講解,分別為link和unlink函數(shù)的使用,需要的朋友可以參考下2015-09-09OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析
這篇文章主要介紹了OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析,需要的朋友可以參考下2015-01-01C++ 中使用不同平臺(tái)的時(shí)間函數(shù)及對比分析
在C++ 編程中,時(shí)間函數(shù)的選擇對于性能測量、任務(wù)調(diào)度和時(shí)間戳記錄至關(guān)重要,本文將介紹在 C++ 中常用的時(shí)間函數(shù),并比較它們在不同平臺(tái)上的應(yīng)用和效果,感興趣的朋友跟隨小編一起看看吧2024-06-06C++學(xué)習(xí)之cstdbool和cstddef頭文件封裝源碼分析
這篇文章主要為大家介紹了C++學(xué)習(xí)之cstdbool和cstddef頭文件封裝源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09