提到指針,真是讓人頭皮發麻,今天筆者來帶你玩轉指針。
話不多說先看這道面試題 (注意細節)
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
最后我們運行程序來看看結果
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注html5模板網的更多內容!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!