第九节--函数专题2

一、指针函数


指针函数是指一个函数的返回值为地址量的函数
指针函数的定义的一般形式如下

<数据类型>  *  <函数名称>(<参数说明>)
          {
           语句序列;
          }

返回值:全局变量的地址/static变量的地址 /字符串常量的地址/堆的地址


下面程序是否有问题,若有问题,如何修改?

#include <stdio.h>
char *  mystring( )  {
	 char str[20];
	 strcpy(str, “Hello”);
	 return str;
}
int  main(void)
{
	 printf(%s\n”, mystring());
       return 0;
}

总结与思考
主要介绍了指针函数的概念以及指针函数的编写
思考
指针函数中可以返回什么样的指针?
编写一个指针函数,把整数123转化成字符串”123”。

二、递归函数和函数指针

递归函数-掌握
函数指针-掌握


递归函数:
递归函数是指一个函数的函数体中直接或间接调用了该函数自身
递归函数调用的执行过程分为两个阶段:
递推阶段:从原问题出发,按递归公式递推从未知到已知,最终达到递归终止条件
回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解


程序举例:
编写一个递归函数,计算n!
编写一个递归函数,计算斐波那契数列
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对


函数指针:
函数指针用来存放函数的地址,这个地址是一个函数的入口地址
函数名代表了函数的入口地址
函数指针变量说明的一般形式如下

<数据类型> (*<函数指针名称>)(<参数说明列表>);

<数据类型>是函数指针所指向的函数的返回值类型
<参数说明列表>应该与函数指针所指向的函数的形参说明保持一致
(*<函数指针名称>)中,*说明为指针()不可缺省,表明为函数的指针

#include <stdio.h>
int add(int a, int b) {return a+b;}
int sub(int a, int b) {return a-b;}
int mul(int a, int b) { return a*b;}
int main(int argc, char *argv[])
{
        int m = 10, n = 20;  
        int  (* p)(int, int);//--函数指针
        p = add;
        //printf("%d\n", add(m, n));
        printf("%d\n", (*p)(m, n));
        p = sub;
        printf("%d\n", (*p)(m, n));
        return 0;
}

函数指针数组:
函数指针数组是一个保存若干个函数名的数组
一般形式如下
<数据类型> (*<函数指针数组名称> [<大小>] )(<参数说明列表> );
其中,<大小>是指函数指针数组元数的个数
其它同普通的函数指针

#include <stdio.h>
char * itoa(char *p, int n);
int main(int argc, char *argv[])
{
        int n;
        char  s[50], * r;
        printf("input:");
        scanf("%d", &n);
        r = itoa(s, n);
        puts(r);
        puts(s);
        return 0;
}
char * itoa(char *p, int n)
{
        int r, i = 0, j;
        //static char p[50];
        while (n) {
                r = n % 10;
                n /= 10;
                p[i] = r + '0';
                i++;
        }
        p[i] = '\0';
        j = i-1;
        i = 0;
        while (i < j) {
                r = p[i];
                p[i] = p[j];
                p[j] = r;
                i++;
                j--;
        }
        return p;
}

总结与思考
主要介绍了递归函数,函数指针以及函数指针数组的相关内容
思考
编写递归函数要注意什么问题?
调用C库中的qsort函数来实现整形数组的排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值