帶你認識指標(二) 指標與陣列

2021-07-25 00:18:53 字數 1674 閱讀 6042

接著上篇部落格說,上篇部落格我們已經知道了什麼是指標,也明白了他的用途,這次我們就來看看指標和陣列之間有什麼奇妙的關係

我們都知道陣列是儲存在一塊連續的儲存空間中,也就是他可以表示一塊連續的記憶體,我們需要得到陣列中的某個元素,可以利用陣列的下標,還可以如何得到呢?

指標可以操作位址,所以說,我們完全可以用指標來獲取到陣列的元素,甚至對陣列元素進行修改,

可以看出陣列和指標其實是一對好**,他們非常相似,只不過適用的範圍不同,指標使用的範圍跟陣列下標相比,當然要廣的多。

c語言的陣列中的陣列名其實也是乙個指標,即陣列第乙個元素的位址(書上原話),看到這裡我就有點蒙了,之前陣列名都是模擬的變數名,變數名就是分配的記憶體的名字,但是這裡稍微有些不同,陣列名是指標,也就是說陣列名列印出來其實是乙個位址,趕緊做了乙個小demo,驗證一下

首先我定義了乙個陣列,然後定義了乙個指標,讓指標指向陣列,接著列印陣列的名字,然後列印了陣列的首元素

發現兩者果然一樣,得到的結論就是:陣列名=陣列首位址=陣列元素首位址

//陣列名就是陣列的首位址

int i;

double score=;

double *ptr_score=score;

//使用指標訪問陣列元素

:陣列名是乙個指標常量,不可以作為乙個變數使用

int array=;

int i;

int *ptr_array=array;

//賦值完畢後,就可以使用指標訪問陣列元素了

第一種就相當於陣列[index]的表達,沒有使用到指標的移動,第二種原來指標變數是沒有改變的,第三種是原來指標變數改變的,進行了自身的++,建議使用第二種,因為如果使用第三種,當乙個迴圈完成後,指標指向最後乙個位址,如果想要在遍歷一次,不能直接在後邊再次複製一遍這個**,因為指標在進行++的時候,就指向別的位址了,列印出來的就不是想要的結果了,如圖所示

int array=;

int i;

int *ptr_array=array;

//賦值完畢後,就可以使用指標訪問陣列元素了

其實這個問題也很好解決,那就是在迴圈之前,把指標進行重置

今天簡單的把指標和陣列的關係通過小例子進行了總結,其實c語言要想學好,看來真要研究一下計算機底層是如何工作的,因為c語言的強大之處就是足夠的接近底層

C語言認識(二)指標

指標 int main p認為是一級指標 p存的是a的位址 指標又稱為間接訪問符。typedef查詢一下。基本變數可以進行混合運算。混合型別 陣列 指標等 基本型別不能和混合型別進行運算。無論是 int p 還是 char p1 double p2 指標的大小是固定的,由cpu大小決定。32bit電...

指標學習二 指標 位址

通過位址的呼叫來改變變數的值 includevoid f int p void g int k int main void f int p void g int k i 0063fe9c p 0063fe9c p 6 k 26定義乙個變數p,它位於2000單元,該單元存放了變數x的位址1000。此時...

指標使用(二)指標崩潰 野指標

指標崩潰 當指標表示無效指標時指標會產生崩潰 示例 include int main int main int main 野指標出現的情概況 1 定義指標未初始化 2 動態建立記憶體後記憶體free掉,沒有把 指標指向null 3 指標超出變數的作用範圍 當呼叫函式時,返回乙個指向棧記憶體的指標,因...