c語言的指標是c語言這門語言的精華所在,當然也是讓很多人詬病的地方。
指標是什麼?有這麼一句話:「對於錘子來說,一切都是釘子。」那麼換句話講指標,即「對於指標來說,一切都是位址」。
記憶體是由乙個個記憶體單元構成的,每個記憶體單元都有自己的位址。而指標就是用來存放這些位址的。凡是可以用指標來儲存的變數,在指標看來它(變數)都是位址。
比如:
二級指標:
存放乙個整型變數位址用一級指標來存放,int a=10; int* pa=&a;
指標變數也是變數,所以可以取的指標變數位址,存放一級指標變數位址用二級指標來儲存。int *ppa=&pa
.依次類推,存放二級指標變數位址用**指標變數來儲存。
對於指標來講,重難點便是和其它知識的結合運用,如下:
指標陣列:
指標陣列,顧名思義,指標陣列它是乙個陣列,陣列元素型別是指標型別。
在main()函式的引數中便用了這種型別:
第乙個是乙個int型變數,表示引數的個數。
第二個是乙個字串指標陣列,陣列中的每乙個指標都指向乙個字串,這些字串就是使用者傳給程式的引數,這些引數用用空格分開。
第三個是環境變數。
陣列指標:
那麼在二維陣列中,我們便可以用陣列指標來接收二維陣列,比如用在函式引數。
函式指標函式指標是指向函式的指標變數。 因而「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。函式指標有兩個用途:呼叫函式和做函式的引數。
double add(double num1, double num2)
int main()
以上為用直接呼叫函式的方式來實現函式呼叫。
用函式指標方式來呼叫函式方法如下
double (*padd)(double num1, double num2)=&add;
int main()
對表示式double (*padd)(double num1, double num2)
進行分析,依據運算子優先順序順序,這個宣告有兩個括號,第乙個括號聚組作用,第二個括號函式呼叫作用,括號裡面是它的引數。第乙個括號迫使間接訪問在函式呼叫之前進行,進行解引用後,是乙個函式型別,所以padd是乙個函式指標。
實際上,在函式呼叫時函式名首先被轉換為乙個函式指標,該指標指定函式在記憶體中的位置。然後,函式呼叫操作符呼叫該函式,執行開始於這個位址的**。
所以呼叫函式可以用三種方法
//第一種
ret=add(3,4);//直接用函式名稱呼叫函式
//第二種
ret=(*padd)(3,4);//用函式指標來呼叫函式。這種方法並不是必須的,因為編譯器在執行函式呼叫操作符之前又會把它轉換回去。
//第三種
ret=padd(3,4);
函式指標陣列上面講過指標陣列的概念和意義,同樣,函式指標陣列可以理解為(函式指標 陣列),有乙個陣列,陣列的元素型別為函式位址。**如下:
#define _crt_secure_no_warnings 1
#include
#include
double add(double num1, double num2)
double sub(double num1, double num2)
//double(*padd)(double num1, double num2) = &add;//函式指標padd
//double(*psub)(double num1, double num2) = ⋐//函式指標psub
double(*p[3])(double num1, double num2) = ;//函式指標陣列
int main()
變數p是乙個陣列,陣列大小為3,陣列元素型別為函式型別。double(*p[3])(double num1, double num2)
。
可以用來實現轉移表。
指向函式指標陣列的指標
如上述中double(*parr[3])(double num1, double num2)
是乙個函式指標陣列,而函式指標陣列的指標是乙個指標,指向上面的表示式。
1,寫出乙個指標(*pparr)
2, 這個指標指向乙個有三個元素的陣列(*(*pparr)[3])
3,寫出返回值和函式呼叫即完整的表示式為
double(*(*pparr)[3])(double num1, double num2)=&parr;
可以看到pparr是乙個指標型別,這個指標指向乙個含有三個元素的陣列,每個元素是函式指標型別。
C語言高階 指標的高階 1
目錄 指標定義 指標變數,用於存放位址。位址唯一對應一塊記憶體空間。指標大小 固定32位平台下佔4個位元組,64位8個位元組。指標型別 型別決定指標整數的步長及指標解引用時訪問的大小。指標運算 指標解引用,指標整數,指標 指標,指標關係運算。本章節在此基礎上,對c語言階段指標進行更深層次的研究。字元...
C語言 高階指標
import import myfunction.h 巨集後面不要加分號 define kimagewidth 200 define kimageheight 200 有引數的巨集 define kmax a,b a b a b 加上括號 define kmul a,b a b define and...
c高階之指標1
1指標 指標的實質就是個變數,它跟普通變數沒有任何區別,指標完整的名字是 指標變數。int a與int p 中a與p繫結的記憶體空間都是4個位元組 指標出現是為了間接訪問 cpu間接定址是cpu設計時決定的 p與 x列印指標,列印出的值是一樣的 下面四種在效果上是一樣的,編譯器不會報錯 int p1...