C语言—函数

news2025/2/2 18:08:16

函数:将代码块封装成一个个不同的函数,在使用时可以多次的调用,不需要关心内部的实现;

#include <stdio.h>

void MyPrint()
{
	printf("&&&&&&&&&&&\n");
	printf("Hello\n");
	printf("World\n");
	printf("&&&&&&&&&&&\n");
}

int main()
{
	MyPrint();
	MyPrint();
}

一个函数,在程序中可以随意调用; 

函数的定义:

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

 当将函数的定义放在Main函数下面的时候,会报错;因为程序的编译是从上到下执行的,先编译Main的时候,还没有定义函数MyPrint,所以在编译过程中就会找不到这个函数;函数要先定义在使用;

但是可以在使用之前先声明有这个函数;

#include <stdio.h>

void MyPrint();    //函数声明

int main()
{
	MyPrint();
	printf("\n");
	MyPrint();
	printf("\n");
}

void MyPrint()
{
	printf("&&&&&&&&&&&\n");
	printf("Hello\n");
	printf("World\n");
	printf("&&&&&&&&&&&");
}

 函数声明的时候,必须和定义的函数保持一致;

#include <stdio.h>

int GetNumber();

int main()
{
	int number = GetNumber();
	printf("%d", number);
}

int GetNumber()
{
	return 888;
}

有返回值的函数,调用GetNumber时,return 返回888;

没有返回值时,返回值类型是void;

#include <stdio.h>

int Add(int a,int b);

int main()
{
	int number = Add(3,6);
	printf("%d", number);
}

int Add(int a, int b)
{
	return a + b;
}

带参函数,传递的参数个数和类型必须保持一致;

将3和6传递给函数Add,返回3+6的结果,赋值给number;

#include <stdio.h>

void Swap(int a,int b);

int main()
{
	int a = 3, b = 6;
	Swap(a,b);
	printf("a=%d,b=%d\n", a, b);
}

void Swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
}

Swap函数,将两个数调换位置,执行后a和b的值其实没有被调换;

实参和形参:调用函数时给的参数时实参,调用的函数在执行时的使用参数是形参;

调用者传递的参数和被调用者使用的参数,并不在同一个地址里;

#include <stdio.h>

void Swap(int *a,int *b);

int main()
{
	int a = 3, b = 6;
	Swap(&a, &b);
	printf("a=%d,b=%d\n", a, b);
}

void Swap(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

想对实参进行修改,就要传递地址,这里需要使用指针,调用者将它实参的地址传递给被调用者的形参,那么被调用者在使用形参的时候,是对实参的地址中的内容进行修改;

#include <stdio.h>

void Sq(int a[5]);

int main()
{
	int a[] = { 1,2,3,4,5 };
	Sq(a);
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n", a[i]);
	}
}

void Sq(int a[5])
{
	for (int i = 0; i < 5; i++)
	{
		a[i] = a[i] * a[i];
	}
}

当数组作为函数的参数时,是传递的数组的首地址;所以在被调用者内部修改时,也是直接修改该地址中的值;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BaseDet: 走过开发的弯路

BaseDet 开源啦&#xff01;该 repo 提供了一些经典的检测 SOTA 模型以及相关组件&#xff0c;欢迎大家按需取用~~GitHub&#xff1a;https://github.com/megvii-research/basedetMegStudio 使用示例&#xff1a;https://studio.brainpp.com/project/28826?nameBaseDet%E4%BD%…

重磅!TDengine 3.2.0 正式发布

近日&#xff0c;TDengine 3.0.2.0 正式发布了。这是自今年 8 月份 TDengine 3.0 发布以来的第一个重要改进版本。 TDengine 3.0 带来了几大核心特性&#xff0c;包括云原生架构、流式计算&#xff0c;还增强了数据订阅功能&#xff1b;更重要的是&#xff0c;3.0 系列版本开始…

Python是个什么鬼?为什么那么多人都要学它?真的有这么牛吗?

为什么那么多人选择学习python&#xff1f; Python在人工智能、大数据、自动化运维、全栈开发等方面具有独特的优势。随着Python继续占据编程语言主流的趋势&#xff0c;全国各城市的招聘岗位和薪酬将大幅增加。此外&#xff0c;随着人工智能在中国的投资和规划&#xff0c;对…

C++ Primer 第三章 Strings, Vectors, and Arrays

C Primer 第三章 Strings, Vectors, and Arrays3.1. Namespace using Declarations3.2. Library string Type3.2.1. Defining and Initializing stringsDirect and Copy Forms of Initialization3.2.2. Operations on stringsReading and Writing stringsUsing getline to Read…

【图像处理】opencv | 形态学运算:腐蚀,膨胀,开运算,闭运算| 二值图像处理

文章目录前言一、腐蚀和膨胀1.1腐蚀1.2膨胀二、开运算与闭运算三、礼帽与黑帽前言 参考视频&#xff1a;opencv教学 参考教材&#xff1a;《数字图像处理基础》 我的代码基本是跟着B站的视频里面敲了一遍&#xff0c;然后结合教材对指定区域做了一些加强学习 一、腐蚀和膨胀 …

华为云APIArts:API全生命周期一体化解决方案,帮助您端到端呵护您的API

摘要&#xff1a;华为云API Arts是API设计、API开发、API测试、API托管、API运维、API变现一体化协作平台&#xff0c;通过维护API各开发阶段数据高度一致&#xff0c;支持开发者高效实现API全流程一站式体验。 伴随数字化浪潮的到来&#xff0c;应用编程接口(API)已经成为一个…

【MySQL】2.MySQL库操作

文章目录1.0 MySQL基本使用1.1 理解数据库操作2.0 MySQL数据库操作详解2.1创建数据库2.2 字符集和校验规则2.2修改数据库2.3删除数据库2.4查看数据库链接1.0 MySQL基本使用 1.1 理解数据库操作 查看数据库配置文件 指令: vim /etc/my.cnf 登录数据库 指令&#xff1a; mysql…

[第十三届蓝桥杯/java/算法]A——排列字母

&#x1f9d1;‍&#x1f393;个人介绍&#xff1a;大二软件生&#xff0c;现学JAVA、Linux、MySQL、算法 &#x1f4bb;博客主页&#xff1a;渡过晚枫渡过晚枫 &#x1f453;系列专栏&#xff1a;[编程神域 C语言]&#xff0c;[java/初学者]&#xff0c;[蓝桥杯] &#x1f4d6…

机器人开发--设计范式

机器人开发--设计范式1 概念范式特点2 三种范式2.1 机器人基元&#xff1a;感知&#xff08;sense&#xff09;、规划&#xff08;plan&#xff09;、执行&#xff08;act&#xff09;2.2 范式分类分级范式 hierarchical paradigm反应范式 reactive paradigm混合范式 hybrid pa…

程序的动态链接(5):使用动态库

前言 Linux下动态库文件的命名规范是以lib开头&#xff0c;紧接着是动态库名&#xff0c;以.so为后缀名&#xff0c;即lib 动态库名.so。 动态库查找过程 在Linux下&#xff0c;动态库的搜索的优先级顺序为&#xff1a; 编译目标代码时指定的动态库搜索路径&#xff0c;保…

达梦数据库(DM8)常用SQL学习

达梦产品手册 1.检查数据库版本及服务状态 1.1 查看达梦数据库运行状态 SELECT status$ as 状态 FROM v$instance;1.2 查看达梦数据库版本 SELECT banner as 版本信息 FROM v$version;2.创建用户并授权 2.1 创建用户 -- 使用 CREATE USER 语句创建 DM 用户&#xff0c;登…

Python爬虫详解

从今天开始&#xff0c;给大家介绍Python爬虫相关知识&#xff0c;今天主要内容是爬虫的基础理论知识。 一、爬虫简介 爬虫是指通过编写程序&#xff0c;来模拟浏览器访问Web网页&#xff0c;然后通过一定的策略&#xff0c;爬取指定内容。因此&#xff0c;爬虫的编写通常分为…

Nature Communications:人类丘脑的基因结构及其与十种常见大脑疾病的重叠

丘脑是位于大脑中心的重要交流中枢&#xff0c;由不同的核组成&#xff0c;对意识和高级皮层功能至关重要。丘脑结构和功能的改变涉及到常见的大脑疾病的发病机制&#xff0c;但丘脑的遗传结构仍然很大程度上未知。在这里&#xff0c;使用来自30114个个体的大脑扫描和基因型数据…

【Linux】进程创建、进程终止、进程等待

目录 一、进程创建 1.1 深入 fork 函数 1.2 写时拷贝 二、进程终止 2.1 进程退出码 2.2 exit 与 _exit 三、进程等待 3.1 进程等待必要性 3.2 进程等待 3.2 wait 与 waitpid 3.3 获取子进程 status 3.4 非阻塞等待 一、进程创建 1.1 深入 fork 函数 在 Linux 中…

如何对图片进行旋转?这些工具能将图片进行旋转

大家平时在日常生活中有没有遇到这种情况&#xff1a;从网上保存下来的图片发现角度方向是错误的&#xff0c;或者是从相机导入拍摄的图片&#xff0c;打开图片发现它们的方向不统一&#xff0c;不方便我们进行观看。这时需要我们对图片进行旋转操作&#xff0c;才能将图片摆正…

图表控件LightningChart.NET 系列教程(四):安装

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

Linux 内核网络栈分析: 接收数据

引言 对于内核网络栈的分析我在大二听了李勇大神来小组的讲座以后就想干了&#xff0c;但像很多主题的文章一样&#xff0c;始终没有勇气&#xff0c;也没有时间动手&#xff0c;我终究还是把这个话题从大二延到大三&#xff0c;从大三延到大四了。冥冥之中某种东西好像早已是…

Python 帮同事用pandas快速筛选Excel文件

同事正在为怎样处理一个18万行的全年财务Excel文件发愁&#xff0c;文件足足有30M&#xff0c;打开文件也要两三分钟&#xff0c;于是他就向我求助。大概意思就是要筛选出Data工作簿“源数据”Sheet中所有收款人对应的付款人及付款笔数、金额小计&#xff0c;于是我简化做了一个…

【RuoYi-Vue-Plus】学习笔记 45 - Spring 事件监听器 @EventListener 注解简单分析

文章目录前言参考目录测试方法配置说明测试方法功能调用流程分析事件监听器初始化事件发布流程前言 因为之前比较忙所以匿了一段时间&#xff0c;顺便当了神雕大侠&#xff08;“阳过”&#xff09;。前段时间框架已经发布了新版本 V4.4.0&#xff0c;而在最新的 dev 分支中使…

labelImg数据标注及yolov5的训练和测试

labelImg数据标注及yolov5的训练和测试 一、labelImg数据标注的使用 数据标注主要针对于哪个地方是什么&#xff0c;一般像隐私类的是不能标注的&#xff0c;如鲁迅的故居可以标&#xff0c;但是张三的住所就不能进行标注。 labelImg是数据标注主要使用的工具。 1、首先使用…