指針
指針類型
- int p;==》普通的整形變量
- int *p;==》p先與*結合,表示p為指針,該指針指向的內容的數據類型為整型
- int p[3];==》p為一個由整型數據組成的數組
- int *p[3];==》因為[]比*優先級高,p先與方括號結合,所以p為一個數組,再與*結合說明數組內的元素是指針類型,指針指向的內容類型為整型,所以p是一個由返回整型數據的指針所組成的數組
- int (*p)[3];==》p先與*結合,說明p為指針,再與方括號結合,說明指針指向的內容是一個數組,然后再與int結合,說明數組內的元素為整型,所以p為一個指向由整型數據組成的數組的指針
- int **p;==》p先與*結合,說明p為指針,然后再與*結合,說明指針指向的元素為指針,然后再與int結合,說明該指針所指向的元素是整型數據
- int p(int);==》p先與括號結合,說明p為函數,且該函數有一個整型變量的參數,函數的返回值是整型數據
- int (*p)(int);==》p先與*結合,說明p為指針,然后與括號結合,說明指針指向一個函數,函數有一個整型變量的參數,返回值為整型數據,所以p是一個指向有一個整型參數且返回值為整型的函數的指針
- int *(p(int))[3];==》p先與括號結合,說明p為函數,函數有一個整型變量的參數,再與*結合,說明函數返回的是指針,再與方括號結合,說明返回的指針指向一個數組,再與結合,說明數組里的元素為指針,再與int結合,說明指針指向的內容是整型數據,所以p是一個參數為一個整型數據且返回一個指向由整型指針變量組成的數組的指針變量的函數
指針
指針為特殊變量,存儲的數值為內存中的地址。
指針重點:
- 指針的類型
指針本身所具有的類型,把指針聲明語句中的指針名字去掉,剩下的部分就是指針的類型
int *p;==》指針的類型為int * - 指針所指向的類型
當通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了編譯器將把那片內存區里的內容當做什么來看待。
將指針聲明語句中的指針名字和*去掉,剩下的就是指針所指向的類型 - 指針的值(指針所指向的內存區)
指針本身存儲的數值,這個值會被編譯器當做地址
指針所指向的內存區就是從指針的值所代表的那個內存地址,長度為sizeof(指針所指向的類型)的一片內存區。 - 指針本身所占據的內存區
32位平臺中指針本身占據4字節
指針的運算
一個指針pold加/減一個整數n后,結果是一個新指針pnew,兩指針類型相同,所指向的類型也相同,兩值相差n*sizeof(pold指針所指向的類型)個字節
兩指針不能加法運算,為非法操作;可以進行減法運算,但必須類型相同
運算符&和*
&:取地址運算符
* :間接運算符