嵌入式C语言16 指针函数

指针函数

返回值类型指针(地址)类型的函数叫做指针函数,返回值类型可以为int * 或者char *等。

                       char *findstring(char *string, const char *str)


设计程序:输入一个长字符串和一个短字符串,如果能在长字符串中找到短字符串,输出长字符串的找到地址,否则输出找不到。

设计思路:

1. 对两个字符串用malloc申请内存,扫描输入后(由于malloc申请的为地址类型,所以直接将地址名放入scanf即可),存入申请的内存中。malloc为void *型,强转为char *型,

2. 设计比较函数:

比较函数返回值类型为字符串指针类型,所以需要定义为指针函数类型,并传入两个字符串的地址类型为char *型。求得两个字符串长度,在循环中判断,将长字符串的地址不断向后移,用strncmp比较两个字符是否相等,相等返回字符地址,循环结束后若不相等返回空。

3.在主函数中调用比较函数,传入两个字符串的地址,返回值存入char *型变量中,若此变量为空,则输出没找到。若不为空,输出字符串地址。

成功找到返回地址
找不到,输出没找到

#include

#include

#include

char *findstring(char *string, const char *str)

{

    int string_len = strlen(string);

    int str_len = strlen(str);

    int i;

    for (i = 0 ; i < string_len - str_len +1; i++)

    {

        if (strncmp(string + i, str,  str_len) == 0 )

        {

            return string + i;

            }

    }

    return NULL;

}

int main()

{

char *string = (char *)malloc(sizeof(char) * 100);

char *str =( char *)malloc(sizeof(char) * 10);

printf("Enter a string and a substring\n");

scanf("%s %s", string, str);

char *a = findstring(string, str);

if ( NULL == a){

        printf("Can not find substring in string !");

}

else{

        printf("%p", a);

}

return 0;

}


小结:

函数指针:一个指向函数的指针,为了调用函数

1. 声明:定义指针参数说明类型 :(int (*p)(int ,int *)

2 . 赋值:将函数名赋值给函数指针: p = func

3 . 传参:给指针传递参数调用函数 p(a, b)

指针函数:一个返回值为指针的函数,为了得到返回的地址

只需定义函数时将返回值改成某某*即可

你可能感兴趣的:(嵌入式C语言16 指针函数)