C语言学习笔记—函数的定义、调用、参数传递

C语言学习-翁凯(目录总章) C语言学习 本内容仅为个人看视频记录的随手笔记,部分内容可能不全面,比如第十四章内容并未单独整理出来一章,可以作为学习翁凯老师视频之后进行复习巩固使用。 C语言学习-翁凯(第二章) C语言学习-翁凯(第三章) C语言学习-翁凯(第四章) C语言学习-翁凯(第五章) C语言学习-翁凯(第六章) C语言学习-翁凯(第七章) C语言学习-翁凯(第八章) C语言学习-翁凯(第九章) C语言学习-翁凯(第十章) C语言学习-翁凯(第十一章) C语言学习-翁凯(第十二章) C语言学习-翁凯(第十三章) 第二章 2.1 阅读详情

一、什么是函数?

为了方便说明我们先引入一个约会的场景例子:
约会

#include <stdio.h>
#include <stdlib.h>
int prepare()
{
	printf("出门前准备中!\n");
    printf("穿衣洗漱!\n");
    printf("准备完毕!\n");
	return 0;
}
int inDiDi(){
	printf("打开手机!\n");
	printf("打开滴滴!\n");
	printf("发布订单!\n");
	printf("等待司机!\n");
    return 0;`
}
int onTheRoad()
{
	printf("在路上!\n");
	printf("订饭店!\n");
    printf("打滴滴中!\n");
	inDiDi();
    printf("通知女神!\n");
    printf("路上的事情准备完毕!\n");
	return 0;
}
int datting()
{
	
	printf("约会中!\n");
    printf("吃饭中!\n");
    printf("看电影中!\n");
    printf("逛街中!\n");
    printf("约会完毕!\n");
	return 0;
}
int goBackHome()
{
	int mark = 0;
    printf("回家中!\n");
    if(mark == 0){
	printf("上不了楼,拥抱一下,告别!\n");
    }else{
    printf("跟她回家!\n");
    }
	return 0;
}


int main()
{

	//以下自定义函数,需要把函数做出来
	prepare();//出门前的准备
    
    onTheRoad();//在路上
    
	datting();//见面
    
    goBackHome();//回家
	system("pause");
	return 0;
}

函数是C语言程序的基本组成单位,是完成某一个特定功能的独立程序模块,包括库函数和自定义函数两种。我们在之前的程序中用到的printf();\scanf()等就是库函数,由C语言系统提供定义编程时直接调用即可。
而自定义函数就想上边例子中的prepare()、inDiDi()、onTheRoad()、datting()、goBackHome()这些,我们自己编写来实现不同功能的模块叫做自定义函数。即需要用户自己定义的函数为自定义函数。

二、如何定义函数?

函数的定义的一般形式
函数类型 函数名 (形式参数表)  //函数首部
{
	实现过程				  //函数体
}

函数首部
  1. 函数首部由函数类型、函数名、形式参数表组成。
  2. 函数类型值得是函数结果返回的类型。与return语句中表达式的类型一致。
  3. 形式参数表是用来给出函数运行索要需要的相关已知条件;多个形参用逗号隔开,每个形参都声明类型。
函数体

用来体现函数的实现过程,由一对大括号内的若干条语句组成,并用return语句返回结果 (结果的类型要与函数类型一致) 。

例:

int goBackHome()
{
	int mark = 0;
    printf("回家中!\n");
    if(mark == 0){
	printf("上不了楼,拥抱一下,告别!\n");
    }else{
    printf("跟她回家!\n");
    }
	return 0;
}

三、如何调用函数?

函数的一般调用形式
函数名(实际参数);
//例:
#include <stdio.h>
#include <stdlib.h>
void buyRice2(int jinshu){
printf("买%d斤米!\n",jinshu);
printf("%p\n",&jinshu);
jinshu++;
printf("%d\n",jinshu);

}
int main()
{
	int a = 10;
    buyRice2(a);
    printf("%p\n",&a);
    printf("%d\n",a);
	system("pause");
	return 0;
}
函数调用的过程

说到函数的调用,那我们就得提到函数的调用过程,首先我们知道任何C程序的执行到要从main()函数开始,在main()函数得执行过程中遇到了函数调用,那么主函数会被暂停执行,转而执行相应的函数,执行完成后再返回主函数继续向下执行。

参数传递

函数定义时其首部的参数就叫形参例如上边例子中buyRice2函数首部的"jinshu",而主调函数的参数则被称为实参,实参是实际参与函数体执行的参数,如main函数里的buyRice2(a);中的“a”。
另外需要注意的就是:

  1. 形参和实参必须一一对应,顺序一致,两者数量相同。
  2. 类型尽量一致。
  3. 函数的形参必须是变量。
  4. C语言规定在参数传递中,将实参的值赋值给形参,这是一种单向传递,也就意味着形参的值得改变不会影响实参。
  5. 函数中return的作用有两个,一个是结束函数的运行,二十带着结果返回主调函数。且return只能返回一个值。
形式参数和局部变量的区别
#include <stdio.h>
#include <stdlib.h>

//1.形式参数作用域仅限于该函数
//2.形式参数有自己的内存空间
/*a.空间的生存期
  b.何时申请了该空间
  c.当该函数被调用的时候,才申请了内存地址空间,才有了这个变量;
  d.同时这个空间内的数据被赋值成为实际参数的值;函数调用把实际参数的值拷贝一份给形式参数
  e.何时释放了该空间
  f.函数执行结束后,该空间由内存管理单元自动回收(释放)*/
void buyRice2(int jinshu){
//jinshu是局部变量也是形式参数,他的作用域仅限该函数

printf("买%d斤米!\n",jinshu);
printf("%p\n",&jinshu);
jinshu++;
printf("%d\n",jinshu);

}

int main()
{
	int a = 10;
	
    buyRice2(a);
    printf("%p\n",&a);
    printf("%d\n",a);
	system("pause");
	return 0;
}

这里还有一个例子:

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

void test(){
	int data = 100;
    printf("data = %d\n",data);
}
void test2(){
	int data = 101;
    printf("data = %d\n",data);
}
void test3(){
	int data = 102;
    printf("data = %d\n",data);
}
int main()
{
	test();
    test2();
    test3();
	system("pause");
	return 0;
}

四、一般定义函数的几种情况

无返回值无参数
#include <stdio.h>
#include <stdlib.h>

void buyRice(){

	printf("去买米\n");

}
void printScreen(){

	printf("*-----------------------*\n");
	printf("*                       *\n");
	printf("*                       *\n");
	printf("*----------Marry--------*\n");
	printf("*                       *\n");
	printf("*                       *\n");
	printf("*-----------------------*\n");
}
int main()
{
    buyRice();
    printScreen();
	system("pause");
	return 0;
}
  1. void代表无返回值,不需要return
无返回值有参数
#include <stdio.h>
#include <stdlib.h>

void buyRice2(int jinshu){

printf("买%d斤米!\n",jinshu);
printf("%p\n",&jinshu);
jinshu++;
printf("%d\n",jinshu);

}

int main()
{
	int a = 10;
	
    buyRice2(a);
    printf("%p\n",&a);
    printf("%d\n",a);
	system("pause");
	return 0;
}

有返回值有参数、有返回值有多个同类型参数
#include <stdio.h>
#include <stdlib.h>

int add(int x,int y){
	int z;
    z = x + y;
	return z;

}
int min(int x,int y){
	int z;
    z = x - y;
	return z;

}
int cheng(int x,int y){
	int z;
    z = x * y;
	return z;

}
int chu(int x,int y){
	int z;
    z = x / y;
	return z;

}
int main()
{
	int data;
	int data2;
    int ret;
    
    while(1){
		printf("请输入第一个数据:\n");
        scanf("%d",&data);
		printf("请输入第二个数据:\n");
        scanf("%d",&data2);
        ret = add(data,data2);
        printf("结果:%d + %d = %d",data,data2,ret);
        ret = min(data,data2);
        printf("结果:%d - %d = %d",data,data2,ret);
        ret = cheng(data,data2);
        printf("结果:%d * %d = %d",data,data2,ret);
        ret = chu(data,data2);
        printf("结果:%d / %d = %d",data,data2,ret);
    }
	system("pause");
	return 0;
}
C语言学习——函数(含递归) 一、函数的几点说明: (1) 一个源文件由一个或者多个函数组成。 (2) 一个C程序由一个或者多个源文件组成。 (3) C程序的执行从 main 函数开始。 (4) 所有的子函数都是平行的。 (5) 从用户的角度看,函数分库函数和自定义函数。 (6) 函数形式: ①无参函数:主调函数无数据传送给被调函数,可带或不带返回值。 ②有参函数:主调函数与被调函数间有参数传递,主调函数可将实参传送给被调函数... 阅读详情

相关推荐

c语言学习笔记

以上是一份 C 语言学习笔记的简要内容,C 语言还有很多其他的特性和高级用法,需要通过不断的学习和实践来掌握。

roki998877的博客 975

C++学习笔记19——函数的定义及其调用

函数 概述 作用:将一段经常使用的代码封装起来,减少重复代码 一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能 函数的定义 函数的定义主要有五个步骤 1.返回值类型 2.函数名 3.参数表列 4.函数体语句 5.return表达式 语法: 返回值类型 函数名(参数列表){ 函数体语句 return表达式 } 案例:实现一个加法函数,传入两个整型数据,计算数据相加的结果,并且返回 示例: ```cpp #i

weixin_49522114的博客 331

【C语言学习历程————自定义函数调用】

在C语言中最基础的程序模块就是函数。C语言可由一个主函数(main)和若干个函数组成,学会调用函数也能使程序更简洁,可以事先编好一些常用的函数来实现不同的功能,例如用sin函数实现一个数的正弦时,把它保存在函数库中,需要用时直接在程序中写上sin(x)就可以直接调用系统函数库中的函数代码,执行这个代码就可以得到预期的答案,反之我们也能在程序中自定义函数,用于实现你想要的功能。提示:以下是本篇文章正文内容,下面案例可供参考。

m0_63302262的博客 1442

协程(四)——Android中使用协程

lifecycleScope跟viewModelScope的使用,方法基本跟CoroutineScope一样,只不过是我们不需要去管理它们的生命周期,他们自动绑定了生命周期,当activity、fragment销毁的时候,自动cancel掉。

怎么可以吃恐龙呢 1923

【软碟通 | UltraISO】刻录光盘教程(制作U盘启动盘)

前言 今天老师说办公室的电脑有点卡,让我给重新安装一个 Windows 7 系统。于是就用软碟通(UltraISO)在 U 盘上刻录了一个 Windows 7 镜像,然后给老师重装了系统。顺便把制作 U 盘启动盘的教程也分享给大家。 软件 UltraISO v9.7.1.3519:点击跳转(密码:dd2k) 教程 将 U 盘插到电脑上,然后鼠标右击选择格式化(制作启动盘必须格式化) 点击文件-打开 选择下载好的系统镜像(如:Windows 7) 点击启动-写入硬盘映像 选择硬盘

XavierJ的博客 2万+

四旋翼无人机控制算法实战:从PID到MPC的路径跟踪

本文深入探讨了四旋翼无人机控制算法的演进路径,从基础的PID控制到高级的MPC算法,详细解析了各类算法的原理、实现技巧及适用场景。通过实战案例对比分析,为开发者提供从算法选型到参数调优的全方位指导,助力提升无人机飞行控制的精度与稳定性。

weixin_29090917的博客 241

Kotlin 协程五 —— 在Android 中使用 Kotlin 协程

一、Android MVVM 结构Android 官方提供的架构图二、添加依赖三、在后台线程中执行3.1 协程解决了什么问题在安卓中,协程很好的解决了两个问题:耗时任务,运行时间过长阻塞主线程主线程安全,允许你在主线程中调用任意 suspend(挂起) 函数获取网页,和 API 进行交互,都涉及到了网络请求。同样的,从数据库读取数据,从硬盘中加载图片,都涉及到了文件读取。这些就是我们所说的耗时任务。

金戈鐡馬 2009

OctoMag: An Electromagnetic System for 5-DOF Wireless Micromanipulation

电磁线圈组驱动经典系统,可以作为参考。 OctoMag: 用于5自由度无线微操作的一个电磁铁系统 OctoMag: An Electromagnetic System for 5-DOF Wireless Micromanipulation [1] Paper Link Authors: J. J. Abbott, etc. 2010, TRO IEEE Transactions on Robot...

XU Yangxin的博客 1665

12.1 Android中协程的基本使用

sealed 关键字sealed 关键字用于定义一个密封类(sealed class),用于控制子类的个数,只接受子类在密封类的同一个文件中声明,或者作为密封类的嵌套类。有助于改进when表达式,当使用密封类的时候,编译器会确保when表达式覆盖所有可能得子类,如果没有覆盖的话,则会出现报错的提醒,这有助于提高代码的健壮性和可维护性。

qq_51108920的博客 1111

STM32:TTL串口调试

TTL只需要两个线就可以完成两个设备之间的双向通信,一个发送电平的I/O称之为TX,与另一个设备的接收I/O口RX相互连接。两设备之间还需要连接地线(GND),这样两设备就有相同的0V参考电势。

superSmart_Dong的博客 5639

在 SAP 系统中,成本中心(Cost Center)是成本核算与费用管控的基础组织单元,其设计质量直接决定了后续成本归集、分摊、分析及责任考核的准确性

SAP系统成本中心设计核心要点:1. 设计原则包括责任可控、业务同质、核算颗粒度适配、组织对齐及稳定性平衡;2. 划分维度主要有部门、功能、地域、项目和资产5类,可组合使用;3. 需避免颗粒度过细、跨责任主体归集等常见误区;4. 建议采用"明确目标-梳理业务-设计编码"三步法,建立科学的成本中心体系。合理的成本中心设计能精准归集费用、明确责任主体,为成本分析和管控奠定基础。

金牌架构师 1439

安卓开发:约束布局中动态加载控件(kotlin语言)

网上找了半天 整的很麻烦,什么需要ConstraintSet.经过摸索得到。//1. 设置为居中。

m0_62545462的博客 465

couldn‘t upgrade db schema: insert into ACT_GE_PROPERTY values (‘common.sche[已解决]

启动整合了flowable的项目,初始化时报错。flowable没有自动建表, 原因 测试数据库版本是MySQL5.7。经过查询和尝试,原因是:在这个数据库里面,已经有一个数据库里面有activiti的这些表了,它检索的时候全库检索查到它了,所以flowable不去建表了,但是我们指定的这个schema里卖弄还是空的,所以它报了找不到表。解决方法:mysql的链接上加上参数如下,让本schema成为默认的schema。...

JavaPub 6009

C语言学习-翁凯(第七章笔记)

C语言学习-翁凯(第七章笔记) 第七章 7.1.1初见函数 素数求和 int m,n; int i; int cnt=0; int sum=0; scanf("%d %d",&m,&n); if(m==1){ m=2; } for(i=m;i<=n;i++){ int isPrime=1; for(int k=2;k<i-1;k++){ if(i%k==0){ isPrime=0; break; } } //判断i

qq_43104872的博客 1002

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 338

一步步带你用C#开发Modbus通信上位机(附完整代码与工程思路)

Modbus上位机开发指南(C#实现) 本文详细介绍使用C#开发Modbus上位机系统的全过程,覆盖RTU和TCP两种协议。内容包含:1)需求分析与技术选型(WinForms+NModbus4);2)分层架构设计(UI/业务/通信层);3)通信层核心代码实现(串口/以太网连接、数据读写);4)功能模块开发(设备管理、数据采集、远程控制)。提供可直接复用的Modbus RTU客户端代码示例,包含连接管理、线圈读写、寄存器操作等工业场景必备功能。通过系统化的开发流程,帮助开发者快速构建稳定可靠的Modbus监控

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 821

C语言学习笔记

/库函数查询工具:www.cplusplus.com、http://en.cppreference.com(英文版)、http://zh.cppreference.com(中文版)//比较两个字符串用strcmp,例如:strcmp(password,“afdf”),如果返回值为0,表示两个字符串相等,头文件string.h。//}结果为三行sh(i=0时,进入第一个循环,进入第二个循环,正常循环三次。没有\0会一直向后找\0。// \xdd,dd表示2个十六进制数字,例如\x61,输出结果为a。

qiyiana的博客 679

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C语言简单笔记

呆呆鸭(呀)的c语言概略学习笔记

liangqianjin_1的博客 1856

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言学习 函数的定义和调用

# &lt;1&gt; 一般函数的声明 下面是一个 求两个整型变量之和的函数 函数运算完是返回一个整型值 所以函数的类型为 int 使用函数时要先声明     #include &lt;stdio.h&gt; /* 函数怎么写? 返回值类型 函数名 (参数) 返回值类型一定要写 不确定或者没有返回值可以写 void 例如 void add(int a,int b) 参数...

weixin_39986534的博客 946

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C语言学习——函数

本文主要对C语言中函数进行了一个简单的介绍,函数是C语言程序设计中的重要概念,主要用于实现程序的模块化和重用。函数分为无参函数和有参函数两种,无参函数没有参数,而有参函数可以接受多个参数。函数定义时需要指定返回类型,通常通过return语句返回值。函数调用可以作为语句、表达式或函数参数。函数的声明和函数原型在调用之前必须提供,以确保调用的正确性。C语言支持函数的递归调用,但要确保递归有终止条件,避免无限循环。函数的灵活使用能够提高代码的可读性和维护性。

weixin_63292027的博客 1241

C语言学习入门之函数详解【上】

1.函数是什么 维基百科中对函数的定义:子程序 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库 2.C语言中函数的分类 1.库函数 2.自定义函数 2.1 库函数 为什么

chenchenchencl的博客 1478

C语言学习总结9——函数定义

函数的定义相关介绍、总结。

weixin_45760797的博客 1451

c语言的功能函数返回值怎么在主函数调用_C语言学习|函数的应用《一》

C语言为程序的结构提供了函数和模块一、函数的定义与使用《编程之道》中写道:“一个程序应该是灵活自由的、它的子过程就像串在一根线子上的珍珠。”子过程在C语言中被称为”函数“。程序的执行从主函数开始,往复、循环、迭代地调用一个又一个函数。函数的分类1.库函数printf()、scanf()等都是ANSIC标准的库函数。任何ANSI C的编译器,无论在什么的平台,都必须提供这些函数供用户使用。仅调用AN...

weixin_39757212的博客 2662

【C语言学习】C语言函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 函数函数的概念函数的分类函数的声明函数的调用总结 函数的概念 函数是c语言的功能单位,实现一个功能可以封装一个函数来实现。定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。 # 函数的定义 什么叫做函数的定义呢?即函数的实现 1、函数的定义方法 返回值 类型函数名字(形参列表) { //函数体,函数的功能在函数体里实现 } 注意: 函数名字是标识符,所以需要满足标识符的命名规则 形参∶可以有,也可以没有,

weixin_45389535的博客 1922

C语言学习笔记--C函数

C函数 函数是一组一起执行一个任务的语句。每个C程序都至少有一个函数,即主函数main(),所有简单的程序都可以定义其他额外的函数。 可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由自己决定的,但是在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。 函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。 C标准库提供了大量的程序可以调用的内置函数。例如,...

weixin_44006265的博客 590
上一篇: C语言学习笔记—循环控制语句(while、for、do.....while)
下一篇: C语言函数小练习——C语言实现加、减、乘、除四则运算
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值