舉個(gè)兩個(gè)整數(shù)加法的例子,希望對(duì)你有幫助:
創(chuàng)新互聯(lián)建站專(zhuān)注于武江企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,成都商城網(wǎng)站開(kāi)發(fā)。武江網(wǎng)站建設(shè)公司,為武江等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
#include stdio.h#include conio.h
//聲明指向函數(shù)的指針類(lèi)型fpAdd,該類(lèi)型的函數(shù),有兩個(gè)整數(shù)作為參數(shù),返回值是一個(gè)整數(shù)。
//其他類(lèi)型的函數(shù)指針聲明方式類(lèi)似,即:typedef 函數(shù)返回值類(lèi)型 (*函數(shù)指針類(lèi)型名稱(chēng))(函數(shù)參數(shù)列表);
typedef int (*fpAdd)(int a,int b);
//聲明兩個(gè)和fpAdd類(lèi)型一致的函數(shù)
int AddTest(int a,int b);
int AddTestAdd5(int a,int b);
//聲明兩個(gè)返回函數(shù)指針的函數(shù)
fpAdd GetAddFun();
fpAdd GetAdd5Fun();
void main()
{
int a = 1;
int b = 2;
int sum;
//取得指向函數(shù)(AddTest)的指針
fpAdd add = GetAddFun();
//取得指向函數(shù)(AddTestAdd5)的指針
fpAdd add5 = GetAdd5Fun();
//通過(guò)函數(shù)指針調(diào)用函數(shù)。
sum = add(a,b);
//輸出結(jié)果
printf("a+b=%d\n",sum);
sum = add5(a,b);
//輸出結(jié)果
printf("a+b=%d\n",sum);
getch();}
int AddTest(int a,int b)
{
return a+b;
}
int AddTestAdd5(int a,int b)
{
return a+b+5;
}
fpAdd GetAddFun()
{
return AddTest;
}
fpAdd GetAdd5Fun()
{
return AddTestAdd5;
}
struct student *p, *q, *head;
這里head不就是 struct student 類(lèi)型的指針么。
這種方式叫做“用指針函數(shù)*creat()的返回值來(lái)傳遞動(dòng)態(tài)內(nèi)存”,這是一個(gè)C語(yǔ)法
首先你要注意,子函數(shù)*creat()用了malloc動(dòng)態(tài)申請(qǐng)內(nèi)存,而return返回的是指針變量所指向的地址,而不是指針!相當(dāng)于將你所申請(qǐng)的動(dòng)態(tài)內(nèi)存返回給主函數(shù)
int
*fun(void)//這里是指針函數(shù)
{
int
*p
=
(int
*)
malloc
(int);//動(dòng)態(tài)申請(qǐng)內(nèi)存//p在這里指向了一塊合法內(nèi)存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指針p所指向的地址,(指針p是在棧上創(chuàng)建的,所以*fun()函數(shù)運(yùn)行完,指針?biāo)峙涞膬?nèi)存被系統(tǒng)自動(dòng)釋放)這時(shí)q指向p,得到了malloc所申請(qǐng)到的內(nèi)存
free(q);//釋放動(dòng)態(tài)內(nèi)存
}
void定義過(guò)后的函數(shù)不是說(shuō)它沒(méi)有返回值,而是它返回的是個(gè)空,也就是null,可以加return
null,也可以不加。當(dāng)你定義函數(shù)時(shí)看最后你需不需要用到這個(gè)函數(shù)最后的結(jié)果,如果不需要就可以給這個(gè)函數(shù)定義void,如果需要?jiǎng)t相應(yīng)的加上它的返回類(lèi)型。每個(gè)函數(shù)在定義的時(shí)候都要加返回類(lèi)型,不需要返回值則定義為void,記住null并不是代表它沒(méi)有返回值,而是返回的是空,只有在java或者c#它們的構(gòu)造函數(shù)才是唯一沒(méi)有返回值的函數(shù)。