1. 程式人生 > >函數指針與指針函數

函數指針與指針函數

int 學習 重新 markdown 字符 code max 函數指針和指針函數 返回

函數指針和指針函數

指針函數的本質是一個函數,只不過其返回值是一個指針類型的變量。如

#include <stdio.h>
#include <stdlib.h>

int *max(int x,int y);//聲明函數原型,返回值為int型指針

int main(int argc, const char * argv[]) {
    printf("Hello, World!\n");
    printf("max %d\n", *max(1,2));
    return 0;
}

int *max(int x,int y){
    int *m = malloc(sizeof(int));
    *m = x>y?x:y;
    return m;
}

函數指針的本質是一個變量,該變量的內容指向一個函數。如

#include <stdio.h>

int max(int x,int y);//聲明函數原型
int (*f)(int x,int y);//定義一個函數指針類型的變量
int main(int argc, const char * argv[]) {
    printf("Hello, World!\n");
    printf("max %d\n", max(1,2));
    f = max;
    printf("max %d\n",f(1,2));
    return 0;
}

int max(int x,int y){
    return x>y?x:y;
}

其實可以把函數指針和指針函數與字符串指針和字符串變量相比較學習。函數指針中的函數名是一個常量,該常量指向函數在內存中的地址;指針函數則是一個變量,該變量的內容也是函數在內存中的地址,只不過變量可以重新賦值,而常量在程序載入內存中就已經確定,無法進行重新復制。

函數指針與指針函數