函数笔记 (部分笔记)

1、实参形参的区别
(1) 实参是属于函数调用者的对象,然后传递给函数被调者;而形参是属于函数被调者的。
(2)形参和实参的数据类型要一致。
(3) 对于不带回值的函数,应当用定义函数为“void”类型(即 空类型)
2、函数的参数传递与返回
(1) 被调函数的形参与调⽤者的实参其实是两个不同的对象 , 即便在函数中任意修改形参的值都不会影响main函数中对象的值。
3、通过形参修改实参的值
(1)通过形参修改实参的值的办法就是利用指针
举个例子
//

没有用到指针
#include <stdio.h>  
  
void swap(int a, int b)  
{  
    int tmp = a;  
    a = b;  
    b = tmp;  
}  
  
int main()  
{  
    int num0 = 3;  
    int num1 = 5;  
    swap(num0, num1);  
    printf("num0 is : %d\n", num0);  
    return 0;  
}  
//输出结果是 num0 is : 3

/

/用到指针
#include <stdio.h>  
  
void swap(int *a, int *b)  
{  
    int tmp = *a;  
    *a = *b;  
    *b = tmp;  
}  
  
int main()  
{  
    int num0 = 3;  
    int num1 = 5;  
    swap(&num0, &num1);  
    printf("num0 is : %d\n", num0);  
    return 0;  
}  
//输出结果是 num0 is : 5

4、带有不定参数类型及个数的函数声明与调⽤

1、C语⾔函数的形参类型列表的最后可以带有不定参数类型及个数的形参列表,⽤(,…)来表⽰。C语⾔标准明确规定,含有不定参数个数的形参列表中,必须要有⼀个确定的命名形参,并且…后不能再跟其他形参。错误示例如下:

//
// 错误!在 ... 之前必须⾄少要有⼀个命名形参
void Func1(...);
// 错误!在 ... 之后不能再跟任何形参
void Func2(int a, ..., int b);
//

5 函数的递归调用
在调用一个函数的时候又出现直接或间接的调用该函数的本身,称为该函数的递归调用。
举例

  #include <stdio.h>
#include <stdlib.h>

int main()
{
    int fac(int n);     //定义函数
    int n,y;
    printf("input an interger number:");
    scanf("%d",&n);
    y = fac(n);      //引用函数
    printf("%d != %d\n",n,y);
    return 0;
}
 int fac(int n)
 {
     int f;
     if(n < 0)
        printf("n < 0,data error!");
     else if(n == 0 || n == 1)
        f = 1;
     else f = fac(n - 1) * n ;     //函数的递归
     return(f);
 }

函数的局部变量和整体变量应用

# define LOW 10
# define HIGH 5
# define CHANGE 2
int i = LOW ;
#include <stdio.h>
void main( )
{ int workover ( int i ) , reset ( int i );
int i = HIGH ;
reset ( i / 2) ;
printf(" i = %d \n ", i );      //以下输出的i都为i = HIGH的值
reset ( i = i / 2) ;               //此时i = HIGH变成了i = HIHG / 2
printf(" i = %d \n ", i );
reset ( i / 2) ;
printf(" i = %d \n ", i );
workover ( i );
printf(" i = %d \n ", i );
}
int workover ( int i )
{ i = ( i % i ) * (( i * i ) / ( 2 * i ) + 4) ;
printf(" i = %d \n ", i );
return ( i );
}
int reset ( int i )
{ i = i <= CHANGE ? HIGH : LOW ;
return ( i );         //此时虽然返回了i的值但是没有对返回值赋值给上面的全局变量
}

所以有以下的结果在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值