指针函数与函数指针

一、指针函数与函数指针的定义

1、指针函数

指针函数是指带指针的函数,它的本质上是一个函数,只是返回的是某种类型的指针。

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

2、函数指针

函数指针,从本质上来说,它是一个指针,只是它指向的不是一般的变量,而是一个函数。

因为每一个函数都有一个入口地址,函数指针指向的就是函数的入口地址。

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

二、以代码分析指针函数与函数指针

1、源代码

#include

// 声明一个函数指针
char* (*fun)(char *str, char *substr);

// 输入字符串
void input(char *str, char *substr)


{
printf("请输入字符串");
gets_s(str,99);
printf("请输入你要搜索的字符:");
gets_s(substr, 99);
}

// 计算字符串的长度不包含'\\0'
int strlen(char *str)
{
int i = 0;
while (str[i] != '\\0')
i++;
return i;
}

// 输出匹配字符串之后的所有字符
char* search_str(char *str, char *search_str)
{
int i, j, k;
k = strlen(str) - strlen(search_str);

if (k > 0 && NULL != str && NULL != search_str)
{
for (i = 0;i<=k;i++)
{
for (j = i;str[j]==search_str[j-i];j++)
{
if (search_str[j-i+1]=='\\0')
{
return str + i + strlen(search_str);
}
}
}
}
return NULL;
}

void print(char *ret_str)
{
if (ret_str!=NULL)
{
printf("所搜索的字符串之后的字符为:%s\\n", ret_str);
}
else

{
printf("没有找到索要搜索的字符串\\n");
}
}

int main()
{
char str1[100], str2[100];
char search_str1[100], search_str2[100];

char *ret_str1, *ret_str2;

input(str1, search_str1);

ret_str1 = search_str(str1, search_str1);
printf("直接调用search_str()\\n");
print(ret_str1);

input(str2, search_str2);

// 函数指针指向函数的入口地址
fun = search_str;

ret_str2 = fun(str2, search_str2);

printf("使用函数指针fun调用函数search_str()\\n");

print(ret_str2);

getchar();
return 0;
}

2、运行结果

3、使用函数指针时需要注意的事项

在使用函数指针的时候,需要注意函数指针要与它所指的函数具有相同的类型,在用函数指针指向函数的时候,用"函数指针名 = 函数名"的形式来引用函数。函数search_str()是一个指针函数,返回的是一个字符指针。