指標函式 和 函式指標陣列 的簡單用法
阿新 • • 發佈:2022-04-20
例如: #include <stdio.h> #include <stdlib.h> #include <string.h> //指標函式 --- 一個函式,它的返回值是指標 char * fun1(void) { char p[] = "hello world"; return p; //不能返回棧中的地址,因為函式執行結束時,棧的空間就釋放了 } char * fun2(void) { static char p[] = "hello world"; //可以返回.data或.bss中的地址,返回後該空間是可讀可寫 return p; } char * fun3(void) { char *p = "hello world"; return p; //可以返回.rodata中的地址,返回後該空間中的資料不能修改,為只讀資料 } char * fun4(void) // { char *p = (char*)malloc(20); strcpy(p,"hello world"); return p; //可以返回.heap中的地址,返回後該空間是可讀可寫 } int main(void) { char *str = NULL; str = fun4(); ///可以使用此處嘗試 printf("str = %s\n",str); *str = 'H'; // 把'h'更改為'H' printf("str = %s\n",str); strcpy(str,"farsight"); printf("str = %s\n",str); return 0; }
函式指標陣列的使用
元素型別為函式指標型別的陣列稱為函式指標陣列 例如: int (*p[5])(int,int); //p為函式指標陣列,有5個元素,每個元素為函式指標,函式指標指向的函式有兩個int型引數,有一個int型返回值 例如: int fun1(int a,int b) { return a + b; } int fun2(int a,int b) { return a - b; } int fun3(int a,int b) { return a * b; } int fun4(int a,int b) { return a / b; } int main(void) { int a,b; printf("請輸入a和b:"); scanf("%d%d",&a,&b); /* printf("%d + %d = %d\n",a,b,fun1(a,b)); printf("%d - %d = %d\n",a,b,fun2(a,b)); printf("%d * %d = %d\n",a,b,fun3(a,b)); printf("%d / %d = %d\n",a,b,fun4(a,b)); */ int (*arr[4])(int,int) = {fun1,fun2,fun3,fun4}; //定義函式指標陣列,儲存4個函式的入口地址 int i; char str[] = "+-*/"; for(i = 0 ; i < 4; i++) //通過陣列迴圈呼叫不同的函式 printf("%d %c %d = %d\n",a,str[i],b,arr[i](a,b)); return 0; }