C语言-函数-1

news2025/4/25 9:15:13

以下是我初学C语言的笔记记录,欢迎在评论区留言补充

一,函数分为几类

* 函数分为两类:

一类是库函数;一类是自定义函数

*  库函数:

系统自己带的,在使用时候,要用到头文件;

查询库函数工具:

cppreference.com

* 自定义函数:

(1)需要包括类型,函数名,主体(表示式);

(2)如果要是自定义这个函数不需要返回值,就定义" void " 类型

图一

# include <stdio.h>

void S(int a) // 类型	函数名(形参)
{
	printf("用的是void,不用返回值");
} //主体(表达式)
int main()
{
	int a = 1;
	S(a); //调用自定义函数
	return 0;
}

图二

//不是void,这里用的是int
#include<stdio.h>
int Add(int x, int y) //返回值类型为整数,函数名(形参)
{
	int z = 0;
	z = x + y;
	return z;
} //主体(表达式)
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d %d", &a, &b);
	c = Add(a, b); //调用自定义函数
	printf("c等于%d", c);
	return 0;
}

二,函数的参数

* 分类:

实参和形参

* 实参:

(1)比如图二main函数中【c = Add(a,b)】内的a,b;

(2)实参是main函数中调用自定义函数中的参数,可以是常量,变量或是表达式【c = Add(a+3,b)】,函数【c = Add(Add(3,5),b)】;

(3)实参是要有一个真实且准确的结果传给形参即可;

(4)实参的作用域或是生命周长:我个人的理解是main函数什么时候结果,它的生命或是作用域也就结束了

* 形参:

(1)比如图二自定义函数中【Add(int x, int y)】内的 x ,y;

(2)形参是在自定义括号内,当main中调用后,就会被销毁,即只有在函数中形参有效;在函数调用的时候,才会被分配内存单元;

(3)形参的作用域或是生命周长:当main函数调用自定义函数开始,到自定义函数完成了所有表达式,就会被销毁

举例:

大概可以理解为黄色部分为实参的作用域,它跟随着main函数;绿色部分为形参的作用域,它开始的条件是黄色部分要调用自定义函数

* 实参和形参的联系

其实两者的关系,和调用方式有着很大联系;

其次,形参实例化【实例化,就是给参数分配内存单元了】是实参的一份临时拷贝,通常情况下,修改形参的数值是无法改变到实参的身上,但是也有例外,比如当进行传址调用时

三,函数的调用

* 调用方式:

一种是传值调用,一种是传址调用

* 传值调用:

把实参的值复制给形参,自定义函数内对形参的修改不影响实参

* 传址调用:

将实参地址传给形参,自定义函数对形参的修改会影响到实参

【我个人对两种调用的理解,前者:实参的值复制给形参的时候,形参开始被创建,意味着它也有内存单元了,即它有了存放这个值的地址了,但是实参和形参的地址是相互独立的,即使两者存放的值是一样的,但是彼此位置唯一且不同,所以形参的修改不影响实参;后者:因为实参是将自己的地址传给了形参,即形参此时是一个指针变量,用来存放地址,那么如果想要形参的修改影响到实参,那么在自定义函数中的表达式,要用到解引用操作符,这样相当于是地址唯一,通过定位进行修改,就可以改变实参值,此时的修改就起到了作用】

 形参的指针变量存着是实参的地址


//效果:将a,b两个值互换

# include<stdio.h>
void Xf(int* x, int* y)//用指针变量存放a,b的地址
{
	int z = 0; //作用是临时存放其中一个变量
	z = *x;//解引用操作符,此时*x就是a
	*x = *y;//这句话意思是 a = b,b赋值给a
	*y = z; // b = z,z赋值给b

	//注意在这个表达式中,如果没有解引用操作符,
	//将形参中的地址翻译成对应的变量,那么无法成功互换数值
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("换位置前a=%d,b=%d", a, b);
	Xf(&a, &b);//取a,b的地址
	printf("\n换位置后a=%d,b=%d", a, b);
	return 0;
}

【琐碎记录】

一个工程里,可以有多个.c,但是只能有一个main函数 

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

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

相关文章

openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解

1 先看openwrt时间&#xff0c;一定要保证时间和浏览器和服务器是一致的&#xff0c;不然无法更新 2 openwrt设置旁路由前先测试下&#xff0c;路由器能否ping通主路由&#xff0c;是否能够连接外网&#xff0c;好多旁路由设置完了&#xff0c;发现还不能远程好多就是旁路由本…

Redis 及其在系统设计中的作用

什么是Redis Redis 是一个开源的内存数据结构存储系统&#xff0c;可用作数据库、缓存和消息代理。它因其快速的性能、灵活性和易用性而得到广泛应用。 Redis 数据存储类型 Redis 允许开发人员以各种数据结构&#xff08;例如字符串、位图、位域、哈希、列表、集合、有序集合…

爬虫-oiwiki

我们将BASE_URL 设置为 "https://oi-wiki.org/" 后脚本就会自动开始抓取该url及其子页面的所有内容&#xff0c;并将统一子页面的放在一个文件夹中 import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlparse import os import pd…

强化学习核心原理及数学框架

1. 定义与核心思想 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种通过智能体&#xff08;Agent&#xff09;与环境&#xff08;Environment&#xff09;的持续交互来学习最优决策策略的机器学习范式。其核心特征为&#xff1a; ​​试错学习​​&#x…

【技术派后端篇】技术派中 Session/Cookie 与 JWT 身份验证技术的应用及实现解析

在现代Web应用开发中&#xff0c;身份验证是保障系统安全的重要环节。技术派在身份验证领域采用了多种技术方案&#xff0c;其中Session/Cookie和JWT&#xff08;JSON Web Token&#xff09;是两种常用的实现方式。本文将详细介绍这两种身份验证技术在技术派中的应用及具体实现…

【基础】Node.js 介绍、安装及npm 和 npx功能了解

前言 后面安装n8n要用到&#xff0c;做一点技术储备。主要是它的两个工具&#xff1a;npm 和 npx。 Node.js介绍 Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本&#xff0c;是一个基于 C…

助力网站优化利用AI批量生成文章工具提升质量

哎&#xff0c;有时候觉得写东西这事儿吧&#xff0c;真挺玄乎的。你看着那些大网站的优质内容&#xff0c;会不会突然冒出个念头——这些家伙到底怎么做到日更十篇还不秃头的&#xff1f;前阵子我蹲在咖啡馆里盯着屏幕发呆&#xff0c;突然刷到个帖子说现在用AI写文章能自动纠…

SpringBootTest报错

Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or … 解决方案&#xff1a;在SpringTest注解中添加属性&#xff08;classes &#xff09;填写启动类 如我的启动类是MainApplication.class javax.websocket.server.ServerContainer no…

w~视觉~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327888 #几个论文 Fast Charging of Energy-dense Lithium-ion Batteries Real-time Short Video Recommendation on Mobile Devices Semantic interpretation for convolutional neural networks: What makes a ca…

Redis安装及入门应用

应用资料&#xff1a;https://download.csdn.net/download/ly1h1/90685065 1.获取文件&#xff0c;并在该文件下执行cmd 2.输入redis-server-lucifer.exe redis.windows.conf&#xff0c;即可运行redis 3.安装redis客户端软件 4.安装后运行客户端软件&#xff0c;输入链接地址…

NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve

//"dev": " NODE_OPTIONS--openssl-legacy-provider vue-cli-service serve" // 修改后&#xff08;Windows 适用&#xff09; "dev": "vue-cli-service serve --openssl-legacy-provider" 升级 Node.js 到 v14&#xff0c;确保依赖…

上篇:深入剖析 BLE 底层物理层与链路层(约5000字)

引言 在无线通信领域,Bluetooth Low Energy(BLE)以其超低功耗、灵活的连接模式和良好的生态支持,成为 IoT 与可穿戴设备的首选技术。要想在实际项目中优化性能、控制功耗、保证可靠通信,必须对 BLE 协议栈的底层细节有深入了解。本篇将重点围绕物理层(PHY)与链路层(Li…

2025 年“泰迪杯”数据挖掘挑战赛B题——基于穿戴装备的身体活动监测问题分析

摘要 本文聚焦于基于穿戴设备采集的加速度计数据,深入研究志愿者在日常活动中的行为特征,构建了多个数学建模框架,实现从身体活动监测、能耗预测、睡眠阶段识别到久坐预警等多个目标。我们依托于多源数据融合与机器学习模型,对人体活动状态进行识别与分析,为健康管理、行…

Linux424 chage密码信息 gpasswd 附属组

https://chat.deepseek.com/a/chat/s/e55a5e85-de97-450d-a19e-2c48f6669234

自定义指令简介及用法(vue3)

一介绍 防抖与节流&#xff0c;应用场景有很多&#xff0c;例如&#xff1a;禁止重复提交数据的场景、搜索框输入搜索条件&#xff0c;待输入停止后再开始搜索。 防抖 点击button按钮&#xff0c;设置定时器&#xff0c;在规定的时间内再次点击会重置定时器重新计时&#xf…

【Spring Boot】深入解析:#{} 和 ${}

1.#{} 和 ${}的使用 1.1数据准备 1.1.1.MySQL数据准备 &#xff08;1&#xff09;创建数据库&#xff1a; CREATE DATABASE mybatis_study DEFAULT CHARACTER SET utf8mb4;&#xff08;2&#xff09;使用数据库 -- 使⽤数据数据 USE mybatis_study;&#xff08;3&#xff…

从实验室到产业端:解码 GPU 服务器的八大核心应用场景​

一、深度学习与人工智能的基石​ 在深度学习领域&#xff0c;GPU 服务器的并行计算架构成为训练大规模模型的核心引擎 —— 传统 CPU 集群训练千亿参数模型需数月&#xff0c;而基于某国际知名芯片厂商 H100 的 GPU 服务器可将周期缩短至数周&#xff0c;国内科技巨头 910B 芯…

java—12 kafka

目录 一、消息队列的优缺点 二、常用MQ 1. Kafka 2. RocketMQ 3. RabbitMQ 4. ActiveMQ 5. ZeroMQ 6. MQ选型对比 适用场景——从公司基础建设力量角度出发 适用场景——从业务场景角度出发 四、基本概念和操作 1. kafka常用术语 2. kafka常用指令 3. 单播消息&a…

数据库-数据类型、约束 和 DQL语言

标题目录 数据类型数字类型INT 型BIGINT 型DOUBLE 类型 字符类型定长字符串变长字符串 日期类型 约束主键约束非空约束唯一性约束检查约束外键约束 DQL 语言WHERE 子句连接多个条件IN (列表)NOT IN (列表)BETWEEN...AND...DISTINCT多字段去重 模糊查询NULL 值判断排序&#xff…

Dify升级-linux环境下使用zip离线安装方式部署升级

Dify安装时Linux服务器到github网络不好&#xff0c;git clone拉去不下来代码。使用本地windows电脑下载zip包形式上传进行了安装。但是随着dfiy版本升级&#xff0c;本地使用最新版本的&#xff0c;也需要进行下升级。参考升级指导以及自己环境情况&#xff0c;升级步骤如下。…