c语言之函数

函数定义

  1.  ret_type fun_name(形参)
  2. {
  3. return value;
  4. }

fun_name为函数名,ret_type为函数返回值

return value:
  • 函数返回value这个值,value的类型为ret_type,若类型为void,则无返回值
  • 若value非ret_type类型,则将其转换为该类型
  • return语句执行后跳出函数,return之后的语句都不执行

函数调用

1 fun_name(实参)

形参在实参被传过来时(函数被调用),才会申请内存空间,函数调用后形参内存空间被释放;形参是实参的一份临时拷贝,内存空间与实参不同,改变形参不影响实参的值。

函数声明

函数调用前要先定义,否则会报错;或者在调用之前声明函数(前提:该函数存在),声明:函数名,函数的返回类型和函数的参数。 如:int is_leap_year(int y)

代码复杂时用例:函数定义和调用分别在源文件(.c)中,声明在头文件(.h)中,例:
add.c
1 // 函数的定义
2 int Add ( int x, int y)
3 {
4 return x+y;
5 }
add.h
1 // 函数的声明
2 int Add ( int x, int y);
test.c
1 # include <stdio.h>
2 # include "add.h"
4 int main()
5 {
        int a = 0;
7         int b = 0;
8         int c = Add(a,b); // 函数调⽤
9         printf("%d",c);
10       return 0;
11 }

数组做函数参数

• 形参可以写成数组或指针形式
• 形参如果是⼀维数组,数组⼤⼩可以省略不写
• 形参如果是⼆维数组,⾏可以省略,但是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同⼀个数组(形参不会创建新的数组)
例:
//形参为指针
void mn_print(int(*p)[],size_t n)
{
    for(int i = 0;i <= n - 1;i++)
    {
        printf("%d ",*p++);
    }
}

//形参为数组
void mn_print(int arr[],size_t n)
{
    for(int i = 0;i <= n - 1;i++)
    {
        printf("%d ",arr[i]);
    }
}

//一维数组传参
int main()
{
    int arr[4] = {1,2,3,4};
    int n = sizeof(arr) / sizeof(arr[0]);
    mn_print(arr,n);
    return 0;
}


嵌套调用

在函数内部调用另一个函数
int is_leap_year(int y)
{
 if(((y%4==0)&&(y%100!=0))||(y%400==0))
 return 1;
 else
 return 0;
}


int get_days_of_month(int y, int m)
{
 int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 int day = days[m];
 if (is_leap_year(y) && m == 2)\\调用is_leap_year函数
 day += 1;
 
 return day;
}

链式访问

将一个函数的返回值作为另一个函数的参数
#include <stdio.h>
int main()
{
 printf("%d\n", strlen("abcdef"));//将strlen函数的返回值作为参数传给printf函数
 return 0;
}


关键字:static 和 extern 

static 是 静态的 的意思,可以⽤来:

•修饰局部变量
•修饰全局变量
•修饰函数

修饰局部变量:局部变量生命周期拉长,但作用域不变,保值,直至跳出函数,例:

#include <stdio.h>

void test()
{
 //static修饰局部变量
 static int i = 0;
 i++;
 printf("%d ", i);
}

int main()
{
 int i = 0;
 for(i=0; i<5; i++)
 {
  test();
 }
 return 0;
}

下一次进入函数时,上一次的i并未销毁,运行结果为1 2 3 4 5

修饰全局变量或函数:

全局变量和函数都有外部链接属性,其他源文件都可使用,而在其他文件中使用时,可先用extern修饰。而当只想在该源文件使用,不想在其他源文件被使用时,要用static修饰。例:

add.h

  1. int m = 0;

test.h

  1. #include <stdio.h>
  2. extern int i;
  3. int main()
  4. {
  5.     printf("%d", i);
  6.     return 0;
  7. }

test.h可使用在add.h被创建的i,但若i被static修饰,则不能跨文件使用

add.h

  1. static int m = 0;
  • 38
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值