C語言指標初探

2021-05-26 21:52:15 字數 1817 閱讀 5203

1.指標型別分析

分析指標,可以從變數名處起,根據運算子優先順序結合,一步一步分析.

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

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

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

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

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

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

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

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

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

2.指標分析

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。

要搞清乙個指標需要搞清指標的四方面的內容:指標的型別、指標所指向的型別、指標的值或者叫指標所指向的記憶體區、指標本身所佔據的記憶體區。

指標的型別:把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別

指標所指向的型別:把指標宣告語句中的指標名字和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別(在指標的算術運算中,指標所指向的型別有很大的作用)

指標本身所佔據的記憶體區:用函式sizeof(指標的型別)可以測出指標本身所佔據的記憶體區(在 32位平台裡,指標本身佔據了 4個位元組的長度)

3.指標的算術運算

指標和整數進行加減:乙個指標 ptrold加(減)乙個整數 n後,結果是乙個新的指標ptrnew,ptrnew 的型別和 ptrold 的型別相同,ptrnew 所指向的型別和 ptrold所指向的型別也相同,ptrnew的值將比 ptrold 的值增加(減少)了n乘sizeof(ptrold所指向的型別)個位元組。

指標和指標進行加減:兩個指標不能進行加法運算,這是非法操作;兩個指標可以進行減法操作,但必須型別相同,一般用在陣列方面。

4. 運算子&和*

&是取位址運算子,*是間接運算子。

&a的運算結果是乙個指標,指標的型別是a的型別加個*,指標所指向的型別是a的型別,指標所指向的位址嘛,那就是a的位址。

c語言指標初探

與c語言指標相關聯的三個符號,乙個是位址符 乙個是間接符號 還有乙個是在宣告指標時用到的 符號。那麼什麼是指標呢?指標時儲存變數位址的變數,不是整型,它就像int,float一樣是指標型別。p i p儲存的是變數i在記憶體中的位址 i p 符號加在指標p前,表示取的是這個位址上的變數值 printf...

初探C語言指標之何為指標變數

c程式設計 第10章學習總結 乙個變數由3部分內容組成,分別是變數型別 變數名 變數內容。如 int i 3 其中,int為變數型別表示給此變數分配2個位元組。i為變數名,程式編譯後將變數名轉換為變數位址,如2000和2001。在2000和2001裡存放變數內容3。乙個變數的位址稱為變數的指標。如2...

c語言指標初探 一 指標與陣列

一 陣列名指標 c 編譯器將陣列名解釋為指標 include using namespace std int main cout sz 編譯器將陣列名解釋為陣列記憶體區域的首位址,對一維陣列來說要實現對某個元素的訪問,既可以用陣列名 下標的形式,也可以用間接引用 陣列名 偏移 陣列元素的指標形式 指...