本文共 2471 字,大约阅读时间需要 8 分钟。
在C语言中,函数的返回值可以是基本数据类型,如整型、浮点型等,也可以是指针类型的数据。返回指针类型数据的函数称为指针函数。其定义方式与指针变量类似,只需在函数的定义中在类型后面加上星号即可。
char* getWord(char c) { switch(c) { case 'A': return "Apple"; case 'B': return "Banana"; case 'C': return "Cat"; case 'D': return "Dog"; default: return "None"; }}
char* getWord(char c)
表明返回值是字符指针类型。"Apple"
返回的是字符串的第一个字符地址。#includechar* getWord(char c) { switch(c) { case 'A': return "Apple"; case 'B': return "Banana"; case 'C': return "Cat"; case 'D': return "Dog"; default: return "None"; }}int main() { char input; printf("请输入一个字符: "); scanf("%c", &input); printf("%s\n", getWord(input)); return 0;}
函数指针是指向函数的指针。函数名在表达式中被解读为指向该函数的指针地址。通过函数名赋值给函数指针变量即可调用对应函数。
void (*p)();
,表示 p
是一个函数指针,指向返回值为 void
的函数。p();
,通过 p
调用目标函数。void fun() { printf("hello, world\n");}int main() { printf("函数名为:%p\n", fun); void (*p)(); p = fun; p(); printf("函数指针p为:%p\n", p); printf("函数指针*p为:%p\n", *p); return 0;}
p = fun;
或 p = &fun;
,效果相同。函数指针可以作为参数传递给函数,实现灵活的功能扩展。
int square(int num) { return num * num;}int main() { int num; printf("请输入一个整数: "); scanf("%d", &num); int (*fp)(int) = square; printf("%d * %d = %d\n", num, num, (*fp)(num)); return 0;}
fp(num)
也可以写成 (*fp)(num)
。fp = square;
或 fp = □
效果相同。可以通过条件控制返回值类型。例如,根据输入判断返回整型指针还是字符指针。
void* func(int n, int* ptr, char* str) { if (n > 0) { return ptr; } else { return str; }}int main() { int num = 520; char *str = "FishC"; printf("%d\n", (int*)func(1, &num, str)); printf("%s\n", (char*)func(-1, &num, str)); return 0;}
void*
,适用于多种数据类型。函数指针可以作为返回值,实现对不同函数的统一调用。
int add(int a, int b) { return a + b;}int sub(int a, int b) { return a - b;}int calc(int (*fp)(int, int), int a, int b) { return (*fp)(a, b);}int main() { printf("1 + 2 = %d\n", calc(add, 1, 2)); printf("3 - 6 = %d\n", calc(sub, 3, 6)); return 0;}
calc
函数返回调用目标函数的结果。指针函数和函数指针是C语言中非常重要的概念,广泛应用于内存操作、函数调用等多个领域。通过合理使用函数指针,可以实现函数的灵活调用和扩展功能。
转载地址:http://qihp.baihongyu.com/