關於指標的理解

2021-10-09 11:41:37 字數 2583 閱讀 9094

先導知識

變數/變數名:就是乙個名字,它和乙個記憶體裡的一塊儲存空間對應,對變數修改相當於修改對應儲存空間裡的儲存的東西。

儲存單元:儲存單元會有自己的位址,裡面也會有儲存的內容。

指標含義:

變數的位址即為該變數的指標,理解為位址(指標)指向了該變數,也就是通過位址(指標)可以找到該變數

如果乙個變數專門用來存放另乙個變數的位址(指標),則稱它為指標變數

要搞清指標要從兩方面

1. 計算機內部是怎樣的過程

1. int a=3; // 這是定義了乙個型別為int的變數,a是變數名,同時也分配了乙個int大小的儲存空間,並在這個空間裡存下了3的二進位制內容,a就是這個儲存空間的臨時的「名字」,儲存空間也有對應的位址,&a就可以取該到位址;

2. int *p; // 這是定義了乙個指向int型別的指標,p是變數名,同時也分配了對應的儲存空間,這個空間用於存放位址,且位址必須是指向int型別的,p和上面的a一樣是這個儲存空間的臨時的「名字」,*p是變數p存放的位址所對應的儲存空間的值

3. p = &a; // 首先p是乙個專門儲存int型別變數位址特殊變數,這樣就把a變數對應儲存空間的位址取出來放到p變數的儲存空間了,後面p列印出來就是a變數對應儲存空間的位址,*p相當於找p變數對應的儲存空間存放的位址裡所放的東西,那麼*p列印出來就是3。

4. (*p)++;// 變數p存放的是位址,這個位址對應這乙個儲存空間,這個空間儲存的值可以用(*p)取到,(*p)++就是對這個值+1

2. 各種符號的結合優先順序

int p; //這是乙個普通的整型變數 

int *p; //首先從p 處開始,先與*結合,所以說明p 是乙個指標,然後再與int 結合,說明指標所指向的內容的型別為int 型.所以p是乙個返回整型資料的指標 

int p[3]; //首先從p 處開始,先與結合,說明p 是乙個陣列,然後與int 結合,說明陣列裡的元素是整型的,所以p 是乙個由整型資料組成的陣列 

int *p[3]; //首先從p 處開始,先與結合,因為其優先順序比*高,所以p 是乙個陣列,然後再與*結合,說明陣列裡的元素是指標型別,然後再與int 結合,說明指標所指向的內容的型別是整型的,所以p 是乙個由返回整型資料的指標所組成的陣列 

int (*p)[3]; //首先從p 處開始,先與*結合,說明p 是乙個指標然後再與結合(與"()"這步可以忽略,只是為了改變優先順序),說明指標所指向的內容是乙個陣列,然後再與int 結合,說明陣列裡的元素是整型的.所以p 是乙個指向由整型資料組成的陣列的指標 

int **p; //首先從p 開始,先與*結合,說是p 是乙個指標,然後再與*結合,說明指標所指向的元素是指標,然後再與int 結合,說明該指標所指向的元素是整型資料.由於二級指標以及更高階的指標極少用在複雜的型別中,所以後面更複雜的型別我們就不考慮多級指標了,最多隻考慮一級指標. 

int p(int); //從p 處起,先與()結合,說明p 是乙個函式,然後進入()裡分析,說明該函式有乙個整型變數的引數,然後再與外面的int 結合,說明函式的返回值是乙個整型資料 

int (*p)(int); //從p 處開始,先與指標結合,說明p 是乙個指標,然後與()結合,說明指標指向的是乙個函式,然後再與()裡的int 結合,說明函式有乙個int 型的引數,再與最外層的int 結合,說明函式的返回型別是整型,所以p 是乙個指向有乙個整型引數且返回型別為整型的函式的指標 

int *(*p(int))[3]; //可以先跳過,不看這個型別,過於複雜從p 開始,先與()結合,說明p 是乙個函式,然後進入()裡面,與int 結合,說明函式有乙個整型變數引數,然後再與外面的*結合,說明函式返回的是乙個指標,,然後到最外面一層,先與結合,說明返回的指標指向的是乙個陣列,然後再與*結合,說明陣列裡的元素是指標,然後再與int 結合,說明指標指向的內容是整型資料.所以p 是乙個引數為乙個整資料且返回乙個指向由整型指標變數組成的陣列的指標變數的函式.

指標變數作為函式引數

#include using namespace std;

void add_point(int *p)

void add(int p)

int main() ;

// 等價於 p = &a[0];

p = a;

// 有三種遍歷陣列的方式

for(int i=0; i< 10; i++)

cout指標引用字串

指標指向函式

返回指標值的函式

指標陣列、多重指標

關於指標的理解

指標的本質 指標是c語言中乙個比較重要的概念。要理解指標,我們先理解以下變數的概念。變數就是c語言對計算機內部某一塊記憶體空間的命名。顯然這個變數名機器本身是不認識的,也是無意義的,但是變數名可以作為乙個標籤,幫助我們定義和使用這塊位址。舉個例子 在計算機中,如果cpu想要儲存乙個資料,它會怎麼實現...

個人關於指標的理解

指標是什麼?如何理解指標?因為指標是抽象的,所以這裡我把它擬物化,這樣解釋也許跟容易懂。指標的專業解釋是 指標是記憶體單元的編號。說明 以下的黑方框都代表乙個位元組 1 對於記憶體。我們一般認為記憶體的基本單位是位元組,記憶體空間由很多位元組組成的。記憶體可以儲存資料,所以我們把每個位元組當做是乙個...

關於指標的簡單理解

首先,指標和int float一樣是一種資料型別 它也要有乙個變數,稱為指標變數,但是這個指標變數裡存放的是另乙個變數的位址 比如 int a a bookname p整體稱為指標變數,a為指標變數名,為指標運算子,bookname為另乙個變數,這個變數的型別必須和 a的型別一致,為int型別 bo...