C Primer Plus(九) 函数

声明:这只是读书笔记和总结

1.C的设计原则是把函数作为程序的构成模块。
9.1函数概述:
函数是用于完成特定任务的程序代码的自包含单元。
函数省去重复代码的编写
函数是的程序更加程序化
黑盒子观点。
9.1.1
函数原型,函数使用,函数定义
函数原型的声明只要在函数使用之前就可以

9.1.2

#include<stdio.h>
//void imin(int ,int);  //一般的形式都是放在主函数之前。
int main(void){
    void imin(int ,int);//放在这也可以 ,分号的使用表示该语句为函数声明语句
}

有些老版本编译器不支持的是void类型,新的编译器支持void类型。
当计算机执行到子函数时,控制权就由主函数变成了子函数,只有当子函数执行完成以后,才可以把控制权返回。
定义函数中的变量为局部变量,只能在子函数中使用,主函数定义相同的变量名互不关联。
9.1.3
形式参量:定义函数时所使用的变量,为子函数私有。

void dibs(int ,int)
void dibs(int x,y,z);//error
void dibs(int x,int y,int z)//ture
void dibs(a,b)
int a;
int b;              //ture,这是ANSI之前的标准

9.1.4
实际参量是调用函数分配给被调函数变量的特定值。
把子函数当做为一个黑盒子,做好必要的注释。
9.1.5
return:

#include <stdio.h>
int imin(int a,int b);

void main(void){
    int a = 1,b = 2 ,c = 0;
     c = imin(a,b);
}
int imin(int a,int b){
    if(a < b)
        return a;
    if(a>b)
        return b;  //返回最小值,c = imin(a,b)turn 
}

当返回值与函数的返回值类型不对是,以函数的类型返回值为标准。
return的另一个作用就是终止函数,把控制权交给上一级函数。
9.1.6
函数的类型。在我们写C语言的时候,我们会在开头加入头文件eg:#include

int imin();
void main(void){
}
int min()
int a,b;
{
    if(``)
    else
}

如果函数使用的时候错误的输入了参数个数,编译器并不会报错,但是会有一个错误的答案。
运行机制在PC和VAX中:
调用函数首先把参数放在一个称作堆栈的临时存储区域,然后被调函数从堆栈中读取这些参数····
ANSIC的解决方案:
在函数声明的时候同时说明所使用的参数类型。
如果使用函数参数太多或太少就会报错。
如果参数的类型错误并不会报错,只会出现一个警告,进行类型转换。

无参数和不确定参数:
无参数时会在括号内写上空的数据类型
void imin(void)

对于不确定参数如printf(“”);
使用下面的原型声明:printf(char *,…);
这种原型参数表示第一个参数为一个字符串,而其他的参数不能确定。
C通过stdarg.h的头文件提供了定义该类函数的标准方法。
函数原型的优点:可以更好地发现错误,还有使用的更加方便。


9.3递归:
C允许一个函数调用它自身。这种调用过程叫做递归。需谨慎处理
eg:

#include<stdio.h>
void up_and_down(int);
int main(void) { 
    up_and_down(1);
    return 0;   
} 
void up_and_down(int n){
    printf("LEVEL %d : n Location %p\n",n,&n);/*1*/
    if(n < 4){
        up_and_down(n + 1);
    }  
    printf("LEVEL %d : n location %p\n",n,&n);/*2*/
}

**结果:
LEVEL 1 : n Location 00000000009FFE30
LEVEL 2 : n Location 00000000009FFE00
LEVEL 3 : n Location 00000000009FFDD0
LEVEL 4 : n Location 00000000009FFDA0
LEVEL 4 : n location 00000000009FFDA0
LEVEL 3 : n location 00000000009FFDD0
LEVEL 2 : n location 00000000009FFE00
LEVEL 1 : n location 00000000009FFE30**

程序分析:
首先主函数调用了up_ang_down(1);
先执行1,此时n == 1;
然后调用自身,n == 2;
在执行1;此时n == 2;
然后调用自身,n == 3;
在执行1,此时n == 3;
然后调用自身,n == 4;
在执行1,此时n == 4;

在执行第四次,n == 4;
然后执行2,n == 4;
在执行第四次,n == 3;
然后执行2,n == 3
在执行第四次,n == 2;
然后执行2,n == 2
在执行第四次,n == 1;
然后执行2,n == 1

要上课了,明天继续!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值