并不是不規(guī)范的問題,你子程序?qū)懛ㄖ荒茉谧映绦蛑休敵稣_的數(shù)據(jù),而在主函數(shù)中無法得到交換過的x和y的值。參考程序運(yùn)用指針讓子程序去讀寫a和b的值,在子程序執(zhí)行完成后,a和b的值確實(shí)得到了交換。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、自適應(yīng)網(wǎng)站建設(shè)、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、小程序設(shè)計(jì)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營銷、管理等多方位專業(yè)化運(yùn)作于一體。
你的程序中子程序采用的不是指針類型參數(shù),這樣子程序無法將交換過后的值傳回來。
具體方法如下:
1
void (*theUboot)(void);
theUboot = (void (*)(void))(0x30700000);
theUboot();
2
(*(void (*)(void))(0x30700000))();
函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
函數(shù)指針有兩個用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。
函數(shù)指針的聲明方法為:
返回值類型 ( *?指針變量名) ([形參列表]);
如:
int func(int x); /* 聲明一個函數(shù) */
int (*f) (int x); /* 聲明一個函數(shù)指針 */
f=func; /* 將func函數(shù)的首地址賦給指針f */
或者使用下面的方法將函數(shù)地址賦給函數(shù)指針:
f = func;
賦值時函數(shù)func不帶括號,也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
下面的程序說明了函數(shù)指針調(diào)用函數(shù)的方法:
#includestdio.h
int?max(int?x,int?y){return?(xy??x:y);}
int?main()
{
int?(*ptr)(int,?int);
int?a,?b,?c;
ptr?=?max;
scanf("%d%d",?a,?b);
c?=?(*ptr)(a,b);
printf("a=%d,?b=%d,?max=%d",?a,?b,?c);
return?0;
}
函數(shù)指針告訴CPU下一步需要執(zhí)行哪里的代碼的指針, 一數(shù)組十分相像.
#include?stdio.h
void?function(int?i,?double?d)????//一個函數(shù)的聲明
{
printf("函數(shù)運(yùn)行,?%d,?%lf\n",?i,?d);
}
void?AnotherFunction(int?i,?double?d)????//另外一個函數(shù)聲明
{
printf("又一個函數(shù)運(yùn)行,?%d,?%lf\n",?i,?d);
}
int?main()
{
void?(*pFun)(int,?double);????//定義了一個函數(shù)指針
int?(*p)(int?,?double);????//用于調(diào)試的函數(shù)指針
pFun?=?function;????//讓這個函數(shù)指針指向第一個函數(shù)
pFun(10,?10.101);????//通過這個函數(shù)指針來調(diào)用第一個函數(shù)
pFun?=?AnotherFunction;????//讓這個函數(shù)指針指向第二個函數(shù)
pFun(20,?20.202);????//通過這個函數(shù)指針來調(diào)用第二個函數(shù)
//若將以下代碼取消注釋,?就會產(chǎn)生錯誤
/*
p?=?function;
p?=?AnotherFunction;
//原因很簡單,?因?yàn)閜是必須指向一個返回值為int,?第一個參數(shù)為int,?第二個參數(shù)為double的函數(shù),?但是在此代碼中定義的函數(shù)返回值是void
*/
//這個實(shí)驗(yàn)中,?直接用函數(shù)名來賦值了,?是因?yàn)楹瘮?shù)名其實(shí)就是這個函數(shù)的指針
//而在平常調(diào)用函數(shù)時,?都要加上(),?如:printf("");
//這里,?"()"就相當(dāng)于'*'(就是取值運(yùn)算符),?printf是函數(shù)指針,?就相當(dāng)于是數(shù)組名,?即數(shù)組的首地址
return?0;
}
網(wǎng)站標(biāo)題:C語言函數(shù)指針的實(shí)現(xiàn),指針函數(shù)C語言
分享網(wǎng)址:http://chinadenli.net/article36/dsiccsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、云服務(wù)器、網(wǎng)站營銷、網(wǎng)站設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)