900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C语言--指针函数和函数指针

C语言--指针函数和函数指针

时间:2021-07-19 09:29:26

相关推荐

C语言--指针函数和函数指针

指针函数和函数指针

指针函数其实是一个简称,是指带指针的函数,它本质上是一个函数,只是返回的是某种类型的指针。其定义的格式为:

类型标识符*函数名(参数表)

函数指针,从本质上说是一个指针,只是它指向的不是一般的变量,而是一个函数。因为每个函数都有一个入口地址,函数指针指向的就是函数的入口地址。其定义的格式为:

类型标识符(*指针变量名)(形参列表)

接下来,通过分析下面的代码加深读者对指针函数和函数指针的理解。代码的功能为在输入字符串中查找指定的字符,如果查找成功,则打印出所查找字符后面的字符串,如果查找失败,则给出提示信息。

#include <stdio.h> char* (*fun)(char *str,char *substr); void input(char *str,char *substr) { printf("请输入字符串:"); gets(str); printf("请输入要搜索的字符串:"); gets(substr); } int strlen(char *str) { int i=0; while(str[i]!='\0') i++; return i; } char* serch_str(char *str,char *serch_str) { int i,j,k; k = strlen(str) - strlen(serch_str); if ( k > 0 && NULL!=str && NULL!=serch_str) { for ( i = 0; i <= k; i++ ) for ( j = i; str[j] == serch_str[j-i]; j++ ) if ( serch_str[j-i+1] == '\0' ) return str+i+strlen(serch_str); } return NULL; } void print(char* ret_str) { if ( ret_str !=NULL ) printf("所搜索字符串之后的字符为:%s\n",ret_str); else printf("没有找到所要搜索的字符串\n"); } void main() { char str1[50],str2[50]; char serch_str1[50],serch_str2[50]; char* ret_str1,* ret_str2; input(str1,serch_str1); ret_str1 = serch_str(str1,serch_str1); printf("直接调用函数serch_str()\n"); print(ret_str1); input(str2,serch_str2); fun = serch_str; ret_str2 = fun(str2,serch_str2); printf("使用函数指针fun调用函数serch_str()\n"); print(ret_str2); return ; }

运行结果:

请输入字符串:Neverforgettosaythanks!请输入要搜索的字符串:say直接调用函数serch_str()所搜索字符串之后的字符为:thanks!请输入字符串:Keepongoingnevergiveup!请输入要搜索的字符串:going使用函数指针fun调用函数serch_str()所搜索字符串之后的字符为:nevergiveup!

分析上面的代码,其中定义函数指针的形式为“char* (*fun)(char *str,char *substr);”,其所指向函数的返回类型为字符指针,所带参数是两个字符指针。在代码的实现中有些需要注意的地方,如在strlen()函数中通过一个结束符来判断字符串的长度,这是因为在输入字符串后面会自动添加一个结束符。由运行结果可知,采用了两种方式来实现函数的调用,一种是直接调用,即通过serch_str()函数来实现;另外一种是使用函数指针的方式来调用,即通过函数指针fun来实现,在调用之前,先使函数指针fun指向serch_str函数的入口地址,之后才能按照调用serch_str()函数的方式来使用。在使用函数指针的时候,需要注意函数指针要与它所指向的函数具有相同的类型,在用函数指针指向函数的时候是用“函数指针名=函数名”的方式来引用函数的。函数serch_str()是一个指针函数,返回的是一个字符指针。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。