當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。
格式:型別說明符* 函式名(引數)
當然了,由於返回的是乙個位址,所以型別說明符一般都是int。
例如:
程式應該是很好理解的,子函式返回的是陣列某元素的位址。輸出的是這個位址裡的值。int* getdate();
int* aaa(int,int);
函式返回的是乙個位址值,經常使用在返回陣列的某一元素位址上。
int* getdate(int wk,int dy);
main() while(wk<1||wk>5||dy<1||dy>7);
printf("%d\n",*getdate(wk,dy));
}int* getdate(int wk,int dy) , ,
, ,
};return &calendar[wk-1][dy-1];
}
其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向乙個返回整型值的函式。指標的宣告筆削和它指向函式的宣告保持一致。
指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。
例如:
void (*fptr)();
fptr=&function;fptr=function;
x=(*fptr)();第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉乙個例子:x=fptr();
程式輸出為:void (*funcp)();
void filefunc(),editfunc();
main()
void editfunc()
filefunc editfunc指標的指標看上去有些令人費解。它們的宣告有兩個星號。例如:
char ** cp;如果有三個星號,那就是指標的指標的指標,四個星號就是指標的指標的指標的指標,依次類推。當你熟悉了簡單的例子以後,就可以應付複雜的情況了。當然,實際程式中,一般也只用到二級指標,三個星號不常見,更別說四個星號了。
指標的指標需要用到指標的位址。
char c=』a』; char *p=&c; char **cp=&p;通過指標的指標,不僅可以訪問它指向的指標,還可以訪問它指向的指標所指向的資料。
下面就是幾個這樣的例子:
char *p1=*cp; char c1=**cp;你可能想知道這樣的結構有什麼用。利用指標的指標可以允許被呼叫函式修改區域性指標變數和處理指標陣列。
首先用乙個陣列的位址初始化指標fp,然後把該指標的位址作為實參傳遞給函式findcredit()。findcredit()函式通過表示式*fpp間接地得到陣列中的資料。為遍歷陣列以找到乙個負值,findcredit()函式進行自增運算的物件是呼叫者的指向陣列的指標,而不是它自己的指向呼叫者指標的指標。語句(*fpp)++就是對形參指標指向的指標進行自增運算的。但是因為運算子高於++運算子,所以圓括號在這裡是必須的,如果沒有圓括號,那麼++運算子將作用於二重指標fpp上。void findcredit(int
**);
main();
int*fp=vals;
findcredit(&fp);
printf("%d\n",*fp);
}void findcredit(int
**fpp)
指標的指標另一用法舊處理指標陣列。有些程式設計師喜歡用指標陣列來代替多維陣列,乙個常見的用法就是處理字串。
先用字元型指標陣列names的位址來初始化指標nm。每次printf()的呼叫都首先傳遞指標nm指向的字元型指標,然後對nm進行自增運算使其指向陣列的下乙個元素(還是指標)。注意完成上述認為的語法為*nm++,它首先取得指標指向的內容,然後使指標自增。char *names= ;
main()
出自:
C語言指標函式和函式指標詳細介紹
原文在此 指標與函式 另外,附上一段 learn c the hard way 18章節的 include include include include our old friend die from ex17.void die const char message else exit 1 a t...
C語言 指標函式和函式指標
指標函式和函式指標 指標函式其實是乙個簡稱,是指帶指標的函式,它本質上是乙個函式,只是返回的是某種型別的指標。其定義的格式為 型別識別符號 函式名 參數列 函式指標,從本質上說是乙個指標,只是它指向的不是一般的變數,而是乙個函式。因為每個函式都有乙個入口位址,函式指標指向的就是函式的入口位址。其定義...
C語言 指標函式和函式指標
1 指標函式是指帶指標的函式,本質上是乙個函式,函式返回值是某一型別的指標 定義 型別識別符號 函式名 參數列 int f int x,int y 它首先是乙個函式,只不過這個函式的返回值是乙個位址值,函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函...