一道面試題教你輕松玩轉C++指針
提到指針,真是讓人頭皮發麻,今天筆者來帶你玩轉指針。
話不多說先看這道面試題 (註意細節)
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; }
是不是看著看著就迷糊瞭,沒關系,咱們畫圖來談個究竟。
這樣一來看起來是不是明顯多瞭,但還是要仔細分析才能保證萬無一失。
第一次打印
先進行++p再進行兩次解引用.見下圖可知我們打印 POINT
第二次打印
先進行 ++CPP 然後解引用 再進行 — 操作將C+1改變為C 接著再一次解引用 最後+3
我們這裡打印結果是 ER
第三次打印
我們先進行CPP[-2]的操作,即相當於 *(CPP-2)但也要註意這裡我們CPP的值並未發生改變
在這裡我們(CPP-2)的指向用黑線表示,然後再一次解引用,最後+3,此時指向瞭圖中ST
所以我們這裡打印ST
第四次打印
CPP[-1]即 *(CPP-1) 這裡的CPP[-1][-1] 即相當於*( *(CPP-1)-1 ) 最後+1指向EW
最後我們運行程序來看看結果
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- C語言:自定義類型詳解
- C語言指針和數組深入探究使用方法
- C語言自定義類型詳解(結構體、枚舉、聯合體和位段)
- C語言char s[]和char* s的區別
- C語言中getchar()的原理以及易錯點解析