1. 程式人生 > 其它 >指標函式 和 函式指標陣列 的簡單用法

指標函式 和 函式指標陣列 的簡單用法

例如: 
#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;
}