一道面試題教你輕松玩轉(zhuǎn)C++指針
提到指針,真是讓人頭皮發(fā)麻,今天筆者來帶你玩轉(zhuǎn)指針。
話不多說先看這道面試題 (注意細節(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)系,咱們畫圖來談個究竟。
這樣一來看起來是不是明顯多了,但還是要仔細分析才能保證萬無一失。
第一次打印
先進行++p再進行兩次解引用.見下圖可知我們打印 POINT
第二次打印
先進行 ++CPP 然后解引用 再進行 -- 操作將C+1改變?yōu)镃 接著再一次解引用 最后+3
我們這里打印結(jié)果是 ER
第三次打印
我們先進行CPP[-2]的操作,即相當于 *(CPP-2)但也要注意這里我們CPP的值并未發(fā)生改變
在這里我們(CPP-2)的指向用黑線表示,然后再一次解引用,最后+3,此時指向了圖中ST
所以我們這里打印ST
第四次打印
CPP[-1]即 *(CPP-1) 這里的CPP[-1][-1] 即相當于*( *(CPP-1)-1 ) 最后+1指向EW
最后我們運行程序來看看結(jié)果
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++實現(xiàn)LeetCode(24.成對交換節(jié)點)
這篇文章主要介紹了C++實現(xiàn)LeetCode(24.成對交換節(jié)點),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(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++學(xué)習(xí)之cstdbool和cstddef頭文件封裝源碼分析
這篇文章主要為大家介紹了C++學(xué)習(xí)之cstdbool和cstddef頭文件封裝源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09