一道面試題教你輕松玩轉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的更多內容!

推薦閱讀: