c语言函数学习

 今天我学习了C语言函数部分,包括库函数、头文件、参数、变量等内容,下面我把我今天所写的代码与知识点分享给大家。

1.函数的应用包含函数定义和函数调用两部分

// 函数的定义
int Add(x, y)   //x和y是形式参数,为了存放函数调用时传入的实际参数
{
    return x + y;
}

// 函数的调用
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("%d %d", &a,&b);
    c = Add(a,b);       //调用Add函数,a和b是实际参数
    printf("ab之和=%d\n", c);
    return 0;
}

2.参数的传递

函数参数的传递是值传递,数组名作为参数时传递的是数组首地址

// 一维数组作为参数
void set_arr1(int arr1[10], int sz)
{
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        arr1[i] = -1;
    }
}

// 二维数组作为参数
void Print_arr(int arr[3][5], int x, int y)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < x; i++)
    {
        for (j = 0; j < y; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

3.函数的返回值

函数返回值类型与函数声明类型不一致时会自动转换

int test()
{
    int a = 5;
    if (a == 5)
    {
        return 3.5; //返回值类型是int,实际返回的是3.5,编译器会自动转换为3
    }
    else
        return 6;
}

4.用return提前返回

void game()
{
    int a = 0;
    scanf("%d", &a);
    printf("hehe\n");
    if (a == 5) //如果a等于5,则执行return语句,提前返回,结束函数game的执行
    {
        return;
    }
    printf("haha");
}

5.函数的链式访问

函数返回值可以作为另一个函数的参数

int main()    //链式访问printf函数的返回值
{
    printf("%d", printf("%d", printf("%d", 43)));
    //printf函数返回值是打印的字符个数 
    //第一次打印43,返回值是2
    //第二次打印2,返回值是1
    //第三次打印1,返回值是1
    //结果是4321
}

6.变量的作用域和生命区间

局部变量(存在栈区)和静态变量(存在静态区)的作用域和生命周期不同

// 局部变量
int test()
{
    int j = 0;  //函数体内的变量j是局部变量,作用域仅限于函数test
    j++;        //j存在栈区
    printf("%d\n", j);//生命周期是函数调用时创建,函数调用结束后销毁
}

// 静态变量
test()
{
    static int j = 0;  //static变量的作用域是函数体内,但生命周期是整个程序运行期间
    j++;        //static把变量存在了静态储存区
    printf("%d\n", j);
}

7.函数的模块化

为了效率,函数声明可以放在.h头文件中,函数定义放在.c源文件中

想使用函数直接#include“***.h"

8. 外部变量

使用extern声明外部变量,static修饰的变量不能被其他文件访问。

extern int a; //声明一个外部变量a,告诉编译器这个变量在其他文件中定义
// 但是当外部变量在所在文件被static修饰时,extern声明无效
// 因为static修饰的变量只能在当前文件中使用,不能被其他文件访问
// 函数默认具有外部链接属性,除非使用static修饰函数

9.判断闰年

// 根据年月判断天数
int is_leap_year(int year)//判断是否是闰年
{
    if (((year%4==0)&& (year%100 != 0))||(year%400==0) )
    {
        return 1; //是闰年
    }
    else
    {
        return 0; //不是闰年
    }
}

int get_days(int year, int month)//根据年月获取天数
{
    int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int d = days[month];
    if (is_leap_year(year) && month == 2)
    {
        d = 29;
    }
    return d;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值