夥伴們注意了!
本文總結了有關stackoverflow.com上的c/ c++指標的常見問題。
指標是c/ c++中最令人困惑的部分,這些問題使用簡單的例子來解釋關鍵指標的概念。
1. 不用迴圈從1數到1000
計算1到1000的唯一其他方法是使用遞迴。
根據c語言,j在開始時的值是「1」。
當1 <= j < 1000時,&main + (&exit - &main)*(j/1000)總是計算到&main,這是main的記憶體位址。
(&main)(j+1)是我們想要得到的下乙個迭代,它將在螢幕上列印「2」,等等。
這個遞迴的停止條件是當j達到1000時,&main + (&exit - &main)*(j/1000)的值是&exit,它將優雅地退出這個程序,並將錯誤**1001返回到作業系統。
2. 為什麼a[5] == 5[a]?
a[b]指c標準中的*(a+b)。
a是基址,b是從a開始的偏移量。a[b]是a+b位址中的值。
因此,a+5和5+a是相同的記憶體位址。
它們的值*(a+5)和*(5+a)是一樣的。
所以a[5] == 5[a]
3.指標可以有多少層?
人類能承受的極限。任何c/c++編譯器都肯定支援更多。
4. c指標指向陣列/陣列指標消歧
下列宣告有何不同:
通過c優先表,array , function return()優先於指標*。
為int * arr1 [8]
arr1首先是乙個陣列,不管元素的型別是什麼。
在應用指標*之後,我們知道arr1是乙個int指標陣列。
int(* arr2)[8]
根據方括號覆蓋規則,在本例中指標*的優先順序高於array。
那麼arr2首先是乙個指標,無論它指向什麼。
在應用array之後,我們知道arr2是指向int陣列的指標。
int * (arr3 [8])
在本例中,括號不改變任何預設優先順序,因此它與int* arr1[8]相同
5. const指標的意義是什麼?
(1) void foo(int* const ptr);
(2) void foo(int* ptr);
對於foo的呼叫者,ptr的值同時(1)和(2)拷貝到foo中。
(1)和(2)只對foo的實現者有影響,而不是foo的客戶端。
在(2)中,實現者可能會意外更改ptr的值,這可能會引入bug。
(1)就像實現者在寫foo的主體之前對編譯器說,「嘿,我不想給ptr賦值,如果它以某種模糊的方式改變了,編譯失敗,讓我檢查一下」
面試必問5大問題
q1 一款成功的產品應該是什麼樣的?不這麼回答 好的產品就是成功的 使用者人數多的就是成功的 能為公司賺錢的就是成功的 ui做得漂亮就是成功的。解析 這樣回答本身沒錯,但對於產品經理來說,好玩 使用者人數 賺錢的這些標準的反向都容易推論為錯誤。1 乙個好的產品,要解決使用者的需求 2 乙個好的產品,...
程式設計師健康面臨的5大問題
程式設計師健康面臨的5大問題 說實在的,程式設計師 是一門苦差事,雖然工資待遇相對其他行業略高一點,但是工作節奏和工作壓力卻遠遠大於大部分行業。然而,面對這樣乙個客觀事實,仍有很大一部分從事 開發 的程式設計師沒有良好的工作方法和生活方式,讓自己長期處在亞健康的狀態,這是讓人非常心痛的。本文列出了幾...
關於C C 的指標
1.陣列和指標作為函式的引數的注意點 將陣列作為引數的時候,會被轉化成指標,例子如下 include using namespace std char fo foliage void my arr func char foliage 10 void my pointer func char foli...