c语言:由strcat()函数引出的指针函数介绍与一个实例的分解讨论

在<string.h>头文件中,我们讨论了strcat()函数,事实上,该函数的原型是一个指针函数:

char *strcat(char *str1,char *str2);

在该指针函数中,strcat()函数将str2指向的字符串连接到了str1指向的字符串后,并且返回连接之后的字符串地址作为函数值。

指针函数介绍

首先,指针函数是一个函数。不过指针函数返回类型是某一类型的指针。指针函数的定义与普通函数定义不同。若要定义一个指针函数,需要在函数名前使用"*"符号表示定义的函数为指针函数。并且函数体中的return需要返回一个地址值。对于指针函数来说,用return返回的值必须为一个指针值。事实上,即使不带有返回某种类型的指针的函数也都有一个相当于指针的入口地址。
格式如下:

数据类型 *函数名(形式参数表)
{函数体}

需要注意的两点:
1.后缀运算符括号"()“表示这是一个函数。
2.前缀运算符星号”*"表示此函数为指针型函数,其函数值为指针,即它的返回值的类型为指针。
有关函数调用语句及其他的内容我们暂不讨论。

指针函数实例分解

要理解指针函数并非易事,接下来我们通过分解一个大学课本上的实例讨论指针函数的用法。

问题如下:
编写一个能查找最大的字符串的函数,并调用该函数求一组字符串中的最长字符串的程序。

首先分析该问题,我们需要设计一个能查找最长字符串的函数,我们可以用max_len()来表示该函数,该函数原型如下:

char *max_len (char *string[],int n)

其中string是字符串指针数组,n是字符串的个数。
该max_len函数的功能是在string指向的n个字符串中查找最长的字符串并且返回该字符串的地址。
接下来,我们要设计主函数。
通过指针数组提供一组字符串,供查找使用。
调用函数max_len()求得最长字符串,并输出结果。
接下来,我们将该实例的步骤分解出来并写程序。

  1. 首先要包含两个头文件。
#include<stdio.h>
#include<string.h>
  1. 其次写主函数。
int main()
{
//首先声明函数
char *max_len(char *[],int);
//其次要写出若干个字符来做比较
char *p_string[4]={"aa","bbb","ccc","dddd"};
//函数调用后返回最长字符串的首地址
puts(maxlen(p_string,4));
}
  1. 接下来就是最重要的的max_len函数了。
//n是字符串的个数
char *max_len(char *string[],int n)
//接下来要写函数体
{
int i,posion,max_1;
//posion变量用来记录最长字符串的序号,定初始值为0
posion=0;
//最大字符串长度变量max_1定初始值
max_1=strlen(string[0]);
for(i=1;i<n;i++)
{
//if实现字符串长度的比较
if(strlen(string[i])>max_1)
{
//记录当前最长字符串的长度
max_1=strlen(string[i]);
//记录当前最长字符串的数组序号
posion=i;
}
}
//将最长字符串的首地址作为函数返回值
return(string[posion]);
}

该程序中的max_len()函数被调用后可以分成以下几个步骤进行:
1.实参指针数组的地址p_string传给形参数组string
2.max_len()函数通过string访问各个字符串
3.string[i]是i号字符串的首地址,strlen(string[i])求得i号字符串的长度
4.posion变量最终记录的是最长的字符串的序号
5.由return语句返回该序号对应的字符串的首地址

经过max_len函数体后,数据返回主函数后即可输出程序执行的结果。有关函数参数的问题,我们下次再进行讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌云陌丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值