記憶體單元的編號也叫做位址。既然根據記憶體單元的編號或者位址就可以找到所需的記憶體單元,所以通常把這個位址稱為指標。
在c語言中,允許用乙個變數來存放指標,這種變數稱為指標變數,因此,乙個指標變數的值就是某個記憶體單元的位址或稱為某記憶體單元的指標。
型別說明符 *變數名
例: int *p2;
float *p3;
char *p4;
指標變數只能指向自己同型別的變數。
兩個有關的運算子:
指標變數初始化的方法:
int a;
int *p=&a;
賦值語句的方法:
int a;
int *p;
p=&a;
注意:1.不允許吧乙個數賦予指標變數。int *p;p=1000;
2.被賦值的指標變數前不能再加「*」說明符,如寫為*p=&a 也是錯誤的。
小應用:輸入a和b兩個整數,按先大後小的順序輸出a和b。
#include
main()
printf("\na=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1, *p2);}
return 0;
}
在c語言中,乙個函式總是占用一段連續的記憶體區,而函式名就是該函式所佔記憶體區的首位址。我們可以把函式的這個首位址(或稱入口位址)賦予乙個指標變數,使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。我們把這種指向函式的指標變數稱為「函式指標變數」。
函式指標變數定義的一般形式為:
型別說明符 (*指標變數名)();
其中「型別說明符」表示被指函式的返回值的型別。「(* 指標變數名)」表示「*」後面的變數是定義的指標變數。最後的空括號表示指標變數所指的是乙個函式。例如:
int (*pf)();
型別說明符 *函式名(形參表)
其中函式名之前加了「*」號表明這是乙個指標型函式,即返回值是乙個指標。型別說明符表示了返回的指標值所指向的資料型別。
int *p()則不是變數說明而是函式說明,說明p是乙個指標型函式,其返回值是乙個指向整型量的指標,*p兩邊沒有括號。作為函式說明,在括號內最好寫入形式引數,這樣便於與變數說明區別。
型別說明符 *陣列名[陣列長度]
其中型別說明符為指標值所指向的變數的型別。例如:
int *pa[3]
表示pa是乙個指標陣列,它有三個陣列元素,每個元素值都是乙個指標,指向整型變數。
示例如下:
int max(int a,int b)
main()
所謂函式型別是指函式返回值的型別。在c語言中允許乙個函式的返回值是乙個指標(即位址),這種返回指標值的函式稱為指標型函式。定義指標型函式的一般形式為:
int *ap(int x,int y)
表示ap是乙個返回指標值的指標型函式,它返回的指標指向乙個整型變數。
int (*p)()是乙個變數說明,說明p是乙個指向函式入口的指標變數,該函式的返回值是整型量,(*p)的兩邊的括號不能少。
乙個陣列的元素值為指標則是指標陣列,指標陣列是一組有序的指標的集合。指標陣列的所有元素都必須是具有相同儲存型別和指向相同資料型別的指標變數。指標陣列說明的一般形式為:
通常可用乙個指標陣列來指向乙個二維陣列。也可理解為指向乙個一維陣列。
int main()
;
int *pa[3]=;
int *p=a[0]; int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
return 0;
}
C語言之指標
指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...
C語言之指標
指標的概念 什麼是指標?如果用一句話概括的的話那就是,乙個存放記憶體空間位址的變數。指標也是乙個變數,指標存放的內容是乙個位址,該位址指向乙個記憶體空間。指標變數的定義 int p 該變數用來存放乙個空間的位址。p 代表該指標指所指向記憶體空間中的值,切記指標只能存放有效的記憶體空間位址,不能存放其...
C語言之指標
指標是c語言學習乙個重要的概念,它極大的方便了c語言程式設計,用好了指標可以幫助我們程式設計,但是同時指標也是飽受爭議,因為指標的使用很容易出錯,所以在一開始學的時候就弄懂有關指標的知識點是必要的。那麼指標是什麼呢?其實指標也是一種變數,和其他型別的變數一樣,也是儲存資料的,只是在指標變數裡面儲存的...