指針函數
的本質是一個函數,只不過其返回值是一個指針類型的變量。如函數
#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; }
其實能夠把函數指針和指針函數與字符串指針和字符串變量相比較學習。函數指針中的函數名是一個常量,該常量指向函數在內存中的地址;指針函數則是一個變量,該變量的內容也是函數在內存中的地址,只不過變量能夠從新賦值,而常量在程序載入內存中就已經肯定,沒法進行從新複製。指針