C语言之函数指针用法总结
一、函数返回指针值
函数是实现特定功能的程序代码的集合,函数代码在内存中也要占据一段存储空间 (代码区内),
这段存储空间的起始地址称为函数入口地址。C语言规定函数入口地址为函数的指针,
即函数名既代表函数,又是函数的指针(或地址)。
1、函数的返回类型可以是指针类型,即函数返回指针值,其定义形式为:
2、函数返回指针值,需要考虑指针有效性的问题,例如:
这个返回有问题,因为它返回的是函数局部变量a的地址值。当函数调用结束后,
函数局部变量会释放,变成未知对象。在return语句时,&a还是有效的,
但主调函数获得这个地址时已经是无效的。
3、函数返回的分类
①由主调函数传递进去的有效指针值。
②由动态分配得到的指针值。
③0值指针,表示无效指针。
4、例题:编写函数stringstr, 实现strstr函数的查找子字符串功能。
stringstr函数的作用是在string字符串中查找有无与strCharSet相同的字符串。
如果有,返回该字符串在string中的位置的指针,否则返回空指针表示没有相同的字符串。
#include<stdio.h> const char *stringstr(const char *string,const char *strCharSet){ const char* p=string,*r=strCharSet; while(*p!=‘\0‘){ while(*p++==*r++); //关键:比较直到字符串结束或不相等为止 if(*r==‘\0‘) return p; //包含strCharSet返回string当前指针 r=strCharSet; //重新指向strCharSet p=++string; //从string下一个字符起始 } return NULL; //不包含strCharSet返回NULL } int main(){ char s1[80]="*A*AB*ABC*ABCD",s2[80]="ABC"; const char *ptr; ptr=(char *)stringstr(s1,s2); if(ptr!=NULL) printf("%s\n",ptr); return 0; }
程序第5行是字符串比较的关键,无论p或是r指向的字符串,只要指向的
字符串有不相同的字符,循环就结束。此时有三中情况:
①p和r均没有指向两个字符串的结束,说明字符串中间就有字符不相等。
②p指向字符串结束,r没有指向字符串的结束,说明r后面还有没有比较的字符。
③p尚未指向字符串结束,r指向字符串的结束。
显然,第③种情况说明p所指向的字符串包含了strCharSet字符串,则r应指向结束符。
相关推荐
拉斯厄尔高福 2020-10-19
徐建岗网络管理 2020-06-26
penkgao 2020-06-25
fengjing81 2020-06-24
AaronPlay 2020-06-13
choupiaoyi 2020-07-28
penkgao 2020-10-13
lsfreeing 2020-06-20
Biao 2020-06-17
yunfeitian 2020-06-13
chensen 2020-11-14
拉斯厄尔高福 2020-11-04
杜倩 2020-10-29
嵌入式资讯精选 2020-10-15
zhaochen00 2020-10-13
yiyilanmei 2020-10-05
wanshiyingg 2020-09-29
Mars的自语 2020-09-27
shenwenjie 2020-09-24