首页 > 其他分享 >C语言学习笔记 Day8(函数)

C语言学习笔记 Day8(函数)

时间:2024-08-08 22:27:53浏览次数:14  
标签:头文件 函数 Day8 形参 笔记 C语言 return 实参 定义

Day8 内容梳理:

目录

Chapter 6  函数

6.0 概述

6.1 定义函数

6.2 调用函数

(1)实参 & 形参

(2)调用无参函数

(3)调用有参函数

6.3 声明函数

6.4 终止函数(exit & return)

6.5 多文件编程

(1)设置主文件

(2)创建头文件

(3)导入头文件


Chapter 6  函数

6.0 概述

函数的分类(2种):

        系统函数(库函数):由编译系统提供,用户无需自己定义即可直接使用。

        用户定义函数:用户自命名的函数,发挥特定功能

函数的作用:

        减少代码冗余;让代码更加模块化,有利于程序的阅读、修改和完善。

6.1 定义函数

定义的格式:

返回值类型 函数名(参数列表)

{

代码

return 0;

}

返回值的类型:

        void:如果是void的话,可以不写return或写return;

        返回值:如果函数返回值类型和return中的类型不一致,则以前者为准

定义函数的例子:

补充:在不同函数里的变量可以重名,因为作用域不同。

在各函数里定义的变量只会作用于本函数,执行完该函数,就从内存中删除。全局变量则不可以与局部变量重名。

6.2 调用函数

(1)实参 & 形参

参数分为两大类:实参和形参

实参有具体的值。

形参没有具体的值,只包含内存地址,其他参数可访问该内存地址。

在函数调用过程,传递的是实参,将具体的值通过定义的函数传递过去(比如main里面的a=10和b=20)

而在函数定义过程中,传递的是形参(比如add里面的a和b,只有数据类型而没有具体数值)

在函数调用结束,该函数(所有变量以及返回值)会在内存中被销毁,这是系统在自动维护内存。所以往往会用一个变量来暂存函数的返回值(比如上图中的int c = add(a, c); 但是对于没有返回值的函数,形参无法被赋值后传回给实参,如下。)

❗ 实参对形参的数据传递是单向传递,只能由实参传递给形参,不能由形参传回给实参。

例子:

在swap函数内部再打印一下a、b,能发现swap函数内的确发生了交换,但是参数的值没能从swap()中的形参a、b传递回main()里的实参a、b

打印语句中用了缩进,以区分main()和swap()中的变量a、b的数值

总结来看,再执行一个被调用的函数时,形参的值如果发生改变,则不会影响主函数中实参的值。

(2)调用无参函数

返回值类型处写void,以及参数列表为空

无参函数调用的例子:

(3)调用有参函数

参数列表中,各个参数之间用逗号隔开。

传递参数时,实参列表和形参列表的长度、类型应该相同,而且变量应该按顺序一一对应上。

实参可以是常量、变量或表达式。但无论是哪种类型,各参数都应在函数调用前被定义到、被赋到确定的值。

6.3 声明函数

如果定义的函数放在main()函数之前,则无需进行函数声明。反之则需要。

声明的格式:extern 数据类型 函数名(参数列表);

(可以忽略extern)

定义是一种特殊的声明。一般把需要分配存储空间的称为“定义”,把不需要分配的成为“声明”。

(对于int a,即是声明又是定义,而extern int b则是声明)

6.4 终止函数(exit & return)

在main()函数中调用exit和return都是终止程序。

在子函数中调用return只是终止子函数,但在子函数中调用exit则是终止整个程序。

6.5 多文件编程

(1)设置主文件

可以把多个文件放在一个项目中,但一个项目只能有一个主文件。

右键点击想要运行的文件,然后选择“设为启动项目”。

(图上这里我只有一个文件,名为“01_基础内容”。如果有多个文件,就能清楚地看到主文件的名字是加粗加黑的,其他文件的名字则是正常字体)

(2)创建头文件

可自定义一些头文件,右键点击“头文件”--“添加”--“新建项”,再点击选择“头文件(.h)”,如图所示。注意这里命名头文件一定是以XXX.h的格式。我命名为了“defined_head.h”。

成功创建头文件之后,最上方的#pragma once不可删去,目的是为了避免多个头文件之间出现互相包含的情况,会报错。

有两种避免重复包含的方法。

一种是:

#pragma once
//声明语句

另一种是:

#ifndef __全大写文件名_H__
#define __全大写文件名_H__

//声明语句

#endif

(3)导入头文件

标准库头文件的导入格式:#include <stdio.h>

自定义头文件的导入格式:#include “XXX.h”

例子:

一般是一个文件对应一个头文件,命名相似,比如01func.cpp对应01func.h

标签:头文件,函数,Day8,形参,笔记,C语言,return,实参,定义
From: https://blog.csdn.net/m0_75036068/article/details/140924838

相关文章

  • 计算机网络考研手写笔记_物理层
    1通信基础概念1)信源、信宿、信号、信道2)码元3)速率4)噪声2编码和调制3数据转为信号4传输介质1)导向型(双绞线、同轴电缆、光纤)2)非导向型(无线电波、微波通信)3)物理层接口的特性(机械、电气、功能、过程)5物理层设备1)中继器2)集线器......
  • 嵌入式初学-C语言-十八
    #接嵌入式初学-C语言-十七#变量的生命周期1.概念:变量在程序运行中存在的时间2.根据变量存在的时间不同,变量可分为静态存储和动态存储 3. 变量的存储类型变量的完整定义格式:[存储类型]数据类型变量列表;  4.存储类型auto:存储类型只能修饰局部变量,被修饰的局......
  • Linux-USB驱动笔记--设备控制器(UDC)驱动
    1、前言在Linux-USB驱动笔记(四)–USB整体框架中有説到设备侧的设备控制器(UDC),下面我们来具体看一下。2、设备控制器(UDC)USB设备控制器(UDC)驱动指的是作为其他USB主机控制器的USB硬件设备上的底层控制器驱动。该硬件和驱动负责将一个USB设备依附于一个USB主机控制器上。UDC驱......
  • 新手的第一个c语言小程序
    作为一个C语言的新手,我深知要想精通这门语言,就必须通过不断的练习来积累经验。因此,我决定从解决高中数学问题入手,编写我的第一个C语言小程序。显然,高中的许多数学问题复杂难解,对于我这个初学者来说,理解答案本身就已经是一项挑战,更不用说用程序来求解了。所以,我选择了数列求和这一......
  • 做题笔记(二)
    [CSP-S2023]消消乐题目传送门[CSP-S2023]消消乐思路考虑DP。显然,设\(f_i\)表示以位置\(i\)结尾的可消除序列的个数,我们对每一个可消除序列考虑模型,大概就是这个样子:\(\text{a}\cdots\text{ab}\cdots\text{b}\)。那么我们当前位置为\(i\),前一个可以与\(i\)匹配的......
  • 最大流学习笔记(待补充)
    刚学了最大流的EK算法和Dinic算法,在此做一点总结。由于这次专题学习是偏向图论建模的,因此目前暂且不涉及算法本身。Dinic板子:namespaceNet{ intS,T; inthead[510],work[510],etot=1; structnode{intnxt,v,cap;}edge[160010]; inlinevoidadd(intx,inty,in......
  • C语言学习
    学习内容一维数组,二维数组创建,初始化,数组名代码笔记#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>//一维数组//数组的创建//数组:相同元素类型的集合//数组的创建方式//typt_t  arr_name [const_n];//元素类型       常量表达式,用来指......
  • C语言--函数
    函数的概述:函数:实现一定功能的,独立的代码模块。函数一定是先定义,后使用使用函数的优势:·我们可以通过函数提供功能给别人使用,也可以使用别人提供的函数,减少代码量               ·借助函数可以减少重复的代码               ·实现结构化(......
  • freertos学习笔记(十)事件标志组
    事件标志组相当于用户平时定义的Flag,事件标志,不过freertos支持将该标志组作为启动task的条件概述分为8位和24位的模式(通过设置宏来配置)每一位有0和1两个状态用法用于平常程序的标记位用于task之间的同步任务a先到达同步点,进入阻塞态设置任务a的事件标记位检查其......
  • C语言数组练习
    数组作业一维数组练习题题目1键盘录入一组数列,利用冒泡排序将数据由大到小排序#include<stdio.h>intmain(){ intt[100],num,tmp; printf("请输入数字个数:"); scanf("%d",&num); printf("请输入%d个数字:\n",num); for(inti=0;i<num;i++){ sc......