嵌入式学习之路(十三)——C语言学习(8)

嵌入式学习之路(十三)——C语言学习(8)
1.前面我们已经讲了数组,接下来我们可以讲讲函数了。首先我们先来写一个函数
  1 #include <stdio.h>
  2
  3 int sum(int , int);/*函数声明*/
  4
  5 int sum(int a, int b)/*求和函数*/
  6 {
  7     return (a+b);/*返回求和结果*/
  8 }
  9 int main(int argc,char *argv[])
 10 {
 11     int a = 0,b = 0;
 12     a = 2;
 13     b = 2;
 14     printf("sum = %d\n",sum(a,b));/*传递实参,调用函数,打印结果*/
 15     return 0;
 16 }
我们来看一下,sum(int a,int b):他是一个求和函数,有两个形式参数,分别是a,和b。a和b都是局部变量,在执行完这个函数之后都会被收回,如果主函数不调用sum的话,这个函数就不会执行。a和bd的值都是通过主函数里的实参传递的,如本程序的a = 2, b =2 传入了sum函数里面的a和b,并且将计算结果a+b = 4通过函数的返回值4,传递给主函数,所以我们在主函数中可以打印出结果4.我们来看下效果
xuxb@xuxb-K42JZ:~/csdn/biaoc/day13$ ./sum
sum = 4
正如大家所见,4的确输出了。这是最基础的啦,接下来看看笔试经常会考到的。
2.题:
  1 #include <stdio.h>
  2
  3 int sum(int arr[5])
  4 {
  5     printf("sizeof(arr) = %d\n",sizeof(arr));
  6     int sum = 0;
  7     int i = 0;
  8     for(i = 0;i < 5;i++)
  9     {   
 10         sum += arr[i];
 11     }
 12     return sum;
 13 }
 14
 15 int main(int argc,char *argv[])
 16 {   
 17     int arr[5] = {1,2,3,4,5};
 18     printf("sizeof(arr) = %d\n",sizeof(arr));
 19     printf("sum = %d\n",sum(arr));
 20     return 0;
 21 }
我们可以看看这两条一样的语句执行的结果是否一样呢?
我们直接来看下结果
xuxb@xuxb-K42JZ:~/csdn/biaoc/day13$ ./sum1
sizeof(arr) = 20
sizeof(arr) = 4
sum = 15
我们可以看到主函数里的sizeof(arr) = 15
求和函数里的sizeof(arr) = 4
我们这边可以得出结论,数组做形参传递的地址,地址的sizeof是4个字节
这里也补充一下,指针的sizeof也是4个字节哦
这是因为指针是一个变量,然而指针变量是一个变量,他是4个字节,不管他指向什么,sizeof(p) = 4
3.接下去讲讲递归函数
编写一个函数,实现n的阶乘?
  1 #include <stdio.h>
  2 int sum(int);
  3 int sum(int num)
  4 {
  5     if(num == 1)
  6     {
  7         return 1;
  8     }   
  9     return num * sum(num-1);
 10 }   
 11 int main(int argc,char *argv[])
 12 {
 13     int num = 5;
 14     printf("%d的阶乘 = %d\n",num,sum(num));
 15     return 0;
 16 }   
 17 我们来看看结果
xuxb@xuxb-K42JZ:~/csdn/biaoc/day13$ ./sum2
5的阶乘 = 120
我们可以看到结果是正确的
在sum函数里面我们可以看到里面又调用了sum函数,这样在C语言中就叫做函数的递归调用
大家写递归函数的时候可以这样思考问题
比如我们要算5的阶乘,5! = 5*4*3*2*1 我们要先算 5*4!就相当于num * sum(num-1)
然后计算到什么时候退出呢?是计算到1的时候退出,所以我们就写了一个if分支,表示退出条件
这样一个完整的递归函数就结束了
那么今天就先到这里吧!再见
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值