c语言(10)函数(ii)

设计函数:

1.能拆成函数的尽量拆成函数
2.函数设计时,尽可能考虑 健壮性,扩展性 

函数调用的关系:

调用者 
被调用者 

int main(void) 
{
   printf("%d\n",getMonthDays()); 
   return 0;
}

这个里面:
main ---成为调用者  ---main函数是整个程序的入口,只能是调用者 
getMonthDays --- 在此处是 被调用者
              

getMonthDays()
{
   isLeapYear();
} //函数的嵌套调用 


main -->getMonthDays -->   isLeapYear

注:
  函数不支持 嵌套定义,但是可以嵌套调用 

  
函数名 --- 函数的入口地址   

函数调用的本质:
   实际是利用的栈的结构  ---先进后出 --保证了函数可以层层嵌套调用

栈:

数据结构 --- (表示数组组织形式)
  特点:
      先进后出 (First In Last Out) //FILO 
  
  c语言角度的栈:
  1.本质上是一块内存空间
  2.只是按照 栈 这种数据结构 来处理和使用的
  
  栈:
     局部变量 //空间 自动申请 自动释放  
     
     

C语言程序:

 把内存划分了5个区域 

栈             //主要    用来存放, 自动变量 或 函数调用的数据 
堆             //空间大  堆上的空间 ,手动申请,手动释放 
字符串常量区   // "hello" (只读)
静态区(全局区) // 全局变量 和 静态变量  
代码区         // 只读的 
程序 = 代码 + 数据 
 

特殊嵌套调用 --- 递归 :

递归:
     自己调用自己  //
直接递归 
间接递归 
   
   
类似循环 --- 递归是一种特殊的循环 


1+2+...+100

sum = sum + 1;
sum = sum + 2;
sum = sum + ...
sum = sum + 100
int sum = 0;
int i = 0;
for (i = 1; i <=100; ++i)
{
    sum = sum + i;
}


sum(100)          //如果要求sum(100)的值,先求出sum(99)+100
  |--sum(99) + 100 //如果要求出sum(99)+100,先求出sum(98)+99
      |--sum(98)+99
           |--sum(97)+98
                ...                         //               ...
                  |--sum(3)+4
                        |--sum(2)+3
                            |--sum(1) + 2  //要求出sum(1)+2的值 只要求 1的值
                                 1                            


递归思路:

   要求问题n 
   依赖于问题n-1的解决 
   
递归代码实现思路:
1.递推关系 
  怎么从 问题 n 到 问题n-1

  sum(100) => sum(99)+100
  sum(99)  => sum(98)+99
  
  sum(n) = sum(n-1)+n;
2.递推结束条件 
  n = 1

3.写代码


数组作为函数参数

//1.数组元素作为函数参数 
//2.数组本身作为函数参数 
int a[10] = {1,2,3};

int add(int a,int b)
{
   return a + b;
}

add(a[0],a[1]); //函数元素


总结:
   1. 一维整型数组 做函数 参数 
      形参  --写成数组形式  还需要 数组长度 
      实参  --数组名,数组长度

     eg:
       printArrray(int a[],int len) //形参 
       //printArrray (int *a,int len) ---编译器最终理解的形式 
       //调用
       printArray(a,len); 

int a[10];
数组名 代表类型 ---int[10] 这种数组类型 
数组名 代表的值 ---首元素的地址 //(数组所占内存空间的首地址)     
 

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值