函數(shù)指針&二級指針

函數(shù)指針

顧名思義函數(shù)指針就是指向函數(shù)的指針,這個指針是指向一個函數(shù)地址篓足,我們在定義函數(shù)的時候也會像變量一樣鸟缕,有一個內存地址晶框,但不同于變量,變量存儲的是固定的值叁扫,而函數(shù)存儲的是函數(shù)的內在地址三妈。通過函數(shù)指針可實現(xiàn)Java多態(tài)的效果。讓我們體驗一下函數(shù)指針吧莫绣!

void funcPoint1(){
    printf("這里是函數(shù)1:%d\n",333);
}
void funcPoint2(int i){
    printf("這里是函數(shù)2:%d\n", i);
}

void main(){
    //函數(shù)指針的定義畴蒲,返回值(*函數(shù)指針名稱)(函數(shù)參數(shù))=&函數(shù)名稱

    //無參指針函數(shù)
    void(*funcP1)() = &funcPoint1;
    //有參數(shù)的指針函數(shù)
    void(*funcP2)(int) = &funcPoint2;


    //調用函數(shù)指針
    funcP1();
    funcP2(3);
    printf("函數(shù)1指針地址:%#x\n", funcP1);
    printf("函數(shù)2指針地址:%#x\n", funcP2);
    system("pause");

}

輸出:

這里是函數(shù)1:333
這里是函數(shù)2:3
函數(shù)1指針地址:0x12a1050
函數(shù)2指針地址:0x12a1055
int add(int n1,int n2){
    return n1 + n2;
}
int minus(int n1,int n2){
    return n1 - n2;
}
//我們可以函數(shù)指針作為函數(shù)參數(shù)傳入,實現(xiàn)java中的多態(tài)
void addOrMinus( int (*f)(int,int),int a,int b){
    int c = f(a,b);
    printf("計算出來的值為:%d\n",c);

}
void main(){
    addOrMinus(add,3,4);
    addOrMinus(minus,99,3);
    system("pause");
}

輸出:

計算出來的值為:7
計算出來的值為:96

通過傳函數(shù)地址对室,就可以調用該函數(shù)進行操作模燥,在Android開發(fā)中經(jīng)常會用到網(wǎng)絡數(shù)據(jù)的回調,NetCallBack功能掩宜,那么C中就可以應用函數(shù)指針進行實現(xiàn)如:

#include <windows.h>//這里需要引入線程休眠頭文件
/*
 *網(wǎng)絡請求數(shù)據(jù)
 */
void netRequest(char* url,void(*callBack)(char*)){
    printf("請求地址:%s\n",url);
    Sleep(2000);
    callBack("服務端的數(shù)據(jù)");
}
/*
 *回調函數(shù)
 */
void callBack(char* netResult){
    printf("網(wǎng)絡請求回調函數(shù)\n");
    printf("來自服務端的數(shù)據(jù):%s\n",netResult);
    system("pause");
}
void main(){
    char* url = "www.baidu.com";
    netRequest(url,callBack);
}

輸出:

請求地址:wwww.baidu.com
網(wǎng)絡請求回調函數(shù)
來自服務端的數(shù)據(jù):服務端的數(shù)據(jù)

二級指針

說白了就是指向指針的指針

void main(){
    int i = 100;
    //定義p指針變量(該p指針本身也是一個內存地址)存儲的是i的內存地址
    int * p = &i;
    //定義pp指針變量存儲的是p指針的地址
    int **pp = &p;
       //*p與的差別:p是一個地址蔫骂,*p是p取地址的值.
        printf("指針地址:%d\n",*p);
    printf("指針地址:%#x\n",&p);
    printf("指向指針的地址:%#x\n",&pp);

    printf("修改之前的值為:%d\n",**pp);
    //多級指針就是要往上一級一級的找,然后通過*來操作內存空間
    **pp = 30;
    printf("修改之后的值為:%d\n",**pp);
    system("pause");
}

輸出:

指針地址:0x30f788
指向指針的地址:0x30f77c
修改之前的值為:100
修改之后的值為:30

指針是操作內存的神器牺汤,二級指針辽旋,不管是幾級指針只要記住里面存儲的是上級指針的地址。

指針運算

void main(){
    int ids[] = { 56, 89, 56, 33, 15 };
    //數(shù)組變量名:ids就是數(shù)組的首地址
    printf("%#x\n",ids);
    printf("%#x\n", &ids);
    printf("%#x\n", &ids[0]);
    //以上三個都是同一個地址

    //指針變量
    int *p = ids;
    printf("%d\n",*p);//取第一個值
    //指針的加法
    p++;
    printf("%d\n", *p);//取第二個值

    p = p + 2;//取第三個的值33
    printf("%d\n", *p);
    system("pause");
}

函數(shù)指針的內存分配

那么指針為什么要有類型,它與地址有什么差別:

  • 地址只是開始的位置
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末补胚,一起剝皮案震驚了整個濱河市码耐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溶其,老刑警劉巖骚腥,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓶逃,居然都是意外死亡束铭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門厢绝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來契沫,“玉大人,你說我怎么就攤上這事代芜〔和剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵挤庇,是天一觀的道長钞速。 經(jīng)常有香客問我,道長嫡秕,這世上最難降的妖魔是什么渴语? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮昆咽,結果婚禮上驾凶,老公的妹妹穿的比我還像新娘。我一直安慰自己掷酗,他們只是感情好调违,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泻轰,像睡著了一般技肩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浮声,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天虚婿,我揣著相機與錄音,去河邊找鬼泳挥。 笑死然痊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的屉符。 我是一名探鬼主播剧浸,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锹引,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辛蚊?” 一聲冷哼從身側響起粤蝎,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袋马,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秸应,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡虑凛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了软啼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桑谍。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祸挪,靈堂內的尸體忽然破棺而出锣披,到底是詐尸還是另有隱情,我是刑警寧澤贿条,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布雹仿,位于F島的核電站,受9級特大地震影響整以,放射性物質發(fā)生泄漏胧辽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一公黑、第九天 我趴在偏房一處隱蔽的房頂上張望邑商。 院中可真熱鬧,春花似錦凡蚜、人聲如沸人断。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恶迈。三九已至,卻和暖如春芹务,著一層夾襖步出監(jiān)牢的瞬間蝉绷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工枣抱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熔吗,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓佳晶,卻偏偏與公主長得像桅狠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型中跌。 運用指針編程是C語言最主要的風格之一咨堤。利用指針變量可以表示各種數(shù)據(jù)結構; ...
    朱森閱讀 3,442評論 3 44
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • C語言指針的總結 1. 變量 不同類型的變量在內存中占據(jù)不同的字節(jié)空間漩符。 內存中存儲數(shù)據(jù)的最小基本單位是字節(jié)一喘,每一...
    xx_cc閱讀 3,741評論 11 39
  • 2016/6/11 監(jiān)控-項目經(jīng)驗總結-Double Check 作者:紅牌后衛(wèi) 經(jīng)驗:1. 凡是不要拖拉,拖拉必...
    紅牌后衛(wèi)閱讀 753評論 0 4
  • 到了大學嗜暴,才理解王小波說的凸克,人在年輕時,最頭疼的一件事就是決定自己這一生要做什么闷沥。 小城出來的我進了個還可以的大學...
    金金金老師閱讀 150評論 1 2