函式與指標
1.在c語言中,乙個函式總是占用一段連續的記憶體區,而函式名就是該函式所佔記憶體區的首位址。
把函式的這個首位址(或稱入口位址)賦予乙個指標變數,使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。我們把這種指向函式的指標變數稱為「函式指標變數」。
函式指標變數定義的一般形式為:
型別說明符 (*指標變數名)();
例如:int (*pf)(); 表示pf是乙個指向函式入口的指標變數,該函式的返回值(函式值)是整型。
2.所謂函式型別是指函式返回值的型別。
在c語言中允許乙個函式的返回值是乙個指標(即位址),這種返回指標值的函式稱為指標型函式。
定義指標型函式的一般形式為:
型別說明符 *函式名(形參表)
其中函式名之前加了「*」號表明這是乙個指標型函式,即返回值是乙個指標。型別說明符表示了返回的指標值所指向的資料型別。
3.int(*p)() 和 int *p()區別
int (*p)()是乙個變數說明,說明p是乙個指向函式入口的指標變數,該函式的返回值是整型量,(*p)的兩邊的括號不能少。
int *p()則不是變數說明而是函式說明,說明p是乙個指標型函式,其返回值是乙個指向整型量的指標,*p兩邊沒有括號。作為函式說明,在括號內最好寫入形式引數,這樣便於與變數說明區別。
對於指標型函式定義,int *p()只是函式頭部分,一般還應該有函式體部分。
指標陣列
乙個陣列的元素值為指標則是指標陣列。
指標陣列的所有元素都必須是具有相同儲存型別和指向相同資料型別的指標變數。
指標陣列說明的一般形式為:
型別說明符 *陣列名[陣列長度]
其中型別說明符為指標值所指向的變數的型別。
例如: int *pa[3];
表示pa是乙個指標陣列,它有三個陣列元素,每個元素值都是乙個指標,指向整型變數。
陣列指標
int a[5][10] 與 int (*p)[10];
二維陣列名是乙個指向有10個元素的一維陣列的指標常量
p=a+i 使 p指向二維陣列的第i行
((p+i)+j) a[i][j]
二維陣列形參實際上是一維陣列指標變數,
即 int x[ ][10] int (x)[10]
變數定義(不是形參)時兩者不等價,系統只給p分配能儲存乙個指標值的記憶體區(一般2位元組);而給a分配25*10位元組的記憶體區
指向指標的指標
1.如果乙個指標變數存放的又是另乙個指標變數的位址,則稱這個指標變數為指向指標的指標變數
char **p;
p前面有兩個號,相當於(*p)。
顯然p是指標變數的定義形式,如果沒有最前面的,那就是定義了乙個指向字元資料的指標變數。現在它前面又有乙個*號,表示指標變數p是指向乙個字元指標型變數的。*p就是p所指向的另乙個指標
#include
int main()
;char **p;
int i;
for(i=0;i<5;i++)
return 0;
}main函式
main (int argc,char *ar**)
argc(第乙個形參)必須是整型變數,
ar**( 第二個形參)必須是指向字串的指標陣列。
argc引數表示了命令列中引數的個數(注意:檔名本身也算乙個引數);
ar**引數是字串指標陣列,其各元素值為命令列中各字串(引數均按字串處理)的首位址。 針陣列的長度即為引數個數
void指標型別
ansi新標準增加了一種「void」指標型別,即可以定義乙個指標變數,但不指定它是指向哪一種型別資料
陣列,指標,指標陣列,陣列指標
指標是在32位系統下佔四個位元組,64位系統下佔八個位元組的一種型別,指標指向的內容可以是常量,變數,函式,結構體,指標本身,陣列,等等.一級指標 一級指標常常在函式傳參時使用,可傳的引數有一維陣列,常量指標,函式指標等等都可以 但我們要注意不要在函式中,通過改變形參的指向來達到改變實參指向的效果,...
指標, 指標的指標, 陣列, 指標陣列, 陣列指標
指標 int a 10 int p a 指標的指標 int b 20 int p b int p2p p 簡單陣列 int c 10 整數陣列,含有10個整數元素 也就是說每乙個元素都是整數 指標陣列 int p 10 指標陣列,含有10個指標元素 也就是說每乙個元素都是指標 陣列指標 int p ...
指標,陣列指標,指標陣列
1.指標 指標可以看成乙個變數,指標所佔記憶體的大小和處理器的定址空間大小有關,32位處理器指標大小為4個位元組,64位處理指標大小為8個位元組。int p 定義乙個int型別的指標,p就可以看成乙個變數,p的值為0,表示p指向0位址 p也是占用記憶體的,編譯器在棧上為p分配記憶體,儲存p的值0,0...