函數(shù)指針一般用來做回調的,一般多線程用的多,因為線程之間,棧空間不一樣。還有就是封裝好的程序,做回調的,比如我寫了一段程序,想要給你用,如果我內部沒有回調,你就要改動我的程序。但我這樣寫,我的執(zhí)行過程是123,二這個步驟,我用函數(shù)指針封裝起來,如果等于空就不執(zhí)行,然后你來用,只需要把我的函數(shù)指針,指向你的函數(shù),我這個程序是不是就可以不改代碼,然后把你的代碼加到中間了,所以,函數(shù)指針除了線程中,通過傳遞消息,根據(jù)消息相互調用,之外,也是封裝的一大利器,如果管理的好,還可以減少代碼雍種,寫的好,增加可讀性。當然你可以不用,也能開發(fā)同樣效果的東西,難度要大很多,特別是代碼到千行以上

創(chuàng)新互聯(lián)建站服務項目包括長垣網(wǎng)站建設、長垣網(wǎng)站制作、長垣網(wǎng)頁制作以及長垣網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,長垣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到長垣省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
C里面函數(shù)都只能返回一個值,如果你的函數(shù)要返回兩個值,那就要用指針了,把變量地址傳進函數(shù),然后把希望通過函數(shù)操作后想要的值存進傳進來的變量地址里面。當然函數(shù)可以返回數(shù)組,結構體,但是你看多了你就知道,沒有人會這么做的,都返回指針。試想如果我有一個1萬個元素的數(shù)組,你會把它整個地傳進一個函數(shù)里面或者整個地返回出來嗎?C語言里面都是傳值的,就是說傳進函數(shù)的參數(shù)值首先被復制一邊賦值給形式參數(shù),你想想1萬個元素,夠嗆咯!但是有指針就好多了,我們可以把指針(數(shù)組的第一個元素的地址)傳進函數(shù)里面,有了開始地址,函數(shù)就知道東西在哪兒,就直接去那兒操作就可以了。單憑這一點,你就可以知道指針的威力,當然你也知道了指針一個很大的用處就是用于函數(shù)之間參數(shù)的傳遞與返回。指針就相當于一個代理一樣,通過代理你知道了你要的東西在哪兒,你去那個地方就可以了,而不是需要把東西整個地板到你面前。
函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
函數(shù)指針有兩個用途:調用函數(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ù)指針調用函數(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ù)改變一個變量的值,就得用指針而不能用值傳遞。還有在很多時候變量,特別是對象的數(shù)據(jù)量實在太大,程序員就會用指針來做形參,只需要傳遞一個地址就行,大大提高了效率。
以上還只是指針的初步應用,隨著你在C語言學習上的逐步深入,你會發(fā)現(xiàn)更多的用途的。
指針的用途非常廣泛,比如如果你想通過函數(shù)改變一個變量的值,就得用指針而不能用值傳遞。還有在很多時候變量,特別是對象的數(shù)據(jù)量實在太大,程序員就會用指針來做形參,只需要傳遞一個地址就行,大大提高了效率。簡單地說指針就是指向變量和對象的地址。
基本說明:
1、在計算機中,所有的數(shù)據(jù)都是存放在存儲器中的。 一般把存儲器中的一個字節(jié)稱為一個內存單元, 不同的數(shù)據(jù)類型所占用的內存單元數(shù)不等,如整型量占2個單元,字符量占1個單元等;
2、為了正確地訪問這些內存單元,須為每個內存單元編上號。 根據(jù)一個內存單元的編號即可準確地找到該內存單元。既然根據(jù)內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。內存單元的指針和內存單元的內容是兩個不同的概念。
指針可以快速訪問數(shù)組中的元素,想訪問下一個,就自加1,上一個就自減1,下一行就自加一行,上一行就自減一行,特別適用快速逐點處理圖像,
如:unsigned char img[1024][768],*p; int i,j; p=(unsigned char *)img; for ( i=0;i1024;i++) for ( j=0;j768;j++,p++ ) *p+=16;
指針還可以用不同類型來訪問同一組數(shù)據(jù):
unsigned char a[4],*p; unsigned int *q; p=a; *p=0x12; p++; *p=0x34; p++; *p=0x56; p++; *p=0x78; q=(unsigned int *)a; printf("%xH",*q);會輸出十六進制數(shù)78563412H
另外指針可以用于給函數(shù)傳遞數(shù)組起始地址、結構地址、類地址、結構數(shù)組地址,這些復雜數(shù)據(jù)組合,函數(shù)返回值也是這樣,另外利用指針還能不從數(shù)組起始地址開始傳入數(shù)組。比如:char str[]; scanf("%s",str); printf("%s\n",str+1);
標題名稱:c語言函數(shù)指針有什么用,c語言的指針有什么用
當前鏈接:http://chinadenli.net/article42/hsgphc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設計公司、小程序開發(fā)、電子商務、網(wǎng)站導航、靜態(tài)網(wǎng)站、ChatGPT
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)