一些關於陣列和指標的想法

2021-08-19 23:42:56 字數 1241 閱讀 6849

指標是c的難點和精華,當他和陣列相遇時,如果沒有好好理清它們之間的關係和原理,那真是搞不清理還亂了。

1:二維陣列a代表什麼含義?

首先定義了乙個二維陣列a,當然我們必須把a看成乙個一維陣列,它有兩個「大」(行)元素,每個「大」(行)元素都由五個「小」(列)元素,這是我們理解陣列的前提條件。

第七行定義了乙個int(*)[5]型別的指標ptr,它指向a的第一行,

(ptr+1)指向第二行,

*(ptr+1)代表了第二行的首元素的位址,

*(ptr+1)+4代表了第二行第五個元素的位址,所以最後輸出了第二行第五列的元素。

ptr指向a的第一行,a代表的含義也是指向a陣列的第一行,那麼其實ptr=a,都是指標的指標,都是二維指標。

2:&a又是什麼意思?

我們首先直接在第七行改動一下:

編譯肯定是不通過的,報錯如下:

雖然錯了,但是通過這條資訊我們知道了這個關鍵資訊:&a的型別:int(*)[2][5]。

在這裡,a不僅僅是乙個二維陣列,我們更應當把它看成乙個物件,那麼對物件a取位址就是在考察物件a是什麼型別的。

先把第七行修改正確:

那麼這裡ptr就是乙個指向物件a的指標,這裡的a恰好是乙個二維陣列。

此時ptr+1是啥意思?

這裡的+1,指標跨度就比之前大多了,因為現在是以物件為單位了,跨度是2*5=10個int型資料。

那是什麼東西?沒人知道是什麼東西。

其實a=&a,雖然含義不同,我們可以將&a強制轉化為int *型別,也就是讓它直接指向首行首元素,那麼:

符合預期。

1中指明了a其實是二維指標,那麼&a就是三維指標了,如下:

果然。未完待續,不定時更新。。。

關於陣列和指標的一些理解

int a 3 int b a cout b 了解了上述原理後,我們來看看下面這種情況。陣列建立的方式有兩種。第一種 int arr new int 2 cout arr 第二種情況 int arr cout arr 第乙個輸出,接受引數是乙個陣列,隱式轉換成陣列首位址。第二個輸出 arr,這得到的...

基於指標的指標的一些想法

大話資料結構 書中有關單鏈表的寫法疑問,正如該鏈結的人所說的對於linklist的疑問,為啥不用linklist p來作為函式的形參。作者寫得很清楚,但是我還是不是很明白,因此查了網上的一些關鍵字。引用 伍迷 老師 您好 我有個問題一直想不通 就是您前面的那個鍊錶 的初始化 是 status ini...

關於OCR,一些想法

ocr一般分為兩種 1,根據給定的字元特徵集合,提取未知字元的特徵進行匹配識別 典型例子 gocr 2,不知道字元特徵,但給出提取特徵的規則,通過機器學習training來獲取某個字符集的特徵集,對未知字元進行匹配識別。典型例子 tesseract 第一種方法簡單,在某些場合很高效,但比較侷限,字符...