關於C c 指標的5大問題

2021-09-11 20:53:48 字數 1472 閱讀 6599

夥伴們注意了!

本文總結了有關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...