29.【C语言】自定义函数

news2024/12/23 15:58:05

1、自定义详解

*提示:先看第12,19篇

例:写一个程序交换两个变量的值

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}
int main()
{
	int a = 10;
	int b = 20;
	swap(a, b);
	printf("%d %d",a, b);
}

函数名前些void,表示无返回类型,即不需要写return xxx;

输出结果显示:a,b并没有交换

打开调试模式,键入F11,打开监视

程序执行一遍后:

x和y的值虽然被交换,但是a和b的值并没有交换

原因:由&a &b &x &y知道:a和x的地址不同,b和y的地址不同

另一种解释(见第3点):swap在被调用时,实参(a,b)传给形参(x,y),形参是实参的临时拷贝,所以改变形参,不改变实参

解决方案:回想第19篇用地址(*pa)来控制变量(a),让a和x,b和y建立联系

-->把a,b的地址交给自定义函数的指针

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap(int* pa, int* pb)
{
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;//*pa等效于main函数中的a,*pb等效于main函数中的b
}
int main()
{
	int a = 10;
	int b = 20;
	swap(&a, &b);
	printf("%d %d",a, b);
}

 

&a和&*pa,&b和&*pb一样

2.疑问解答:

Q:为什么第12篇创建函数时为什么没有使用指针?

A:第12篇讲的是求两个数的和,并没有改变输入的x和y,因此不用指针。所以自定义函数要使用指针的前提是改变变量

3.函数的参数

实际参数(实参):
真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类
型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配
内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在
函数中有效(生命周期类似局部变量)。

如:swap(a,b);的a和b是实际参数,swap(2,3)的2和3是实际参数,void swap(m,n)的m和n是形式参数

4.函数的调用方式

01传调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

void swap(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}


02传调用
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式,这种传参方式可以让函数和函数外边的变量建立起正真的联系,也就是函数内部可以直接操作函数外部的变量

void swap(int* pa, int* pb)
{
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;
}

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

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

相关文章

目标检测--X-anylabeling使用自己的模型自动标注

一、x-anylabeling安装教程 x-anylabeling安装教程——软件安装教程——X-AnyLabeling 安装与自动标注 二、x-anylabeling使用自己的模型标注&#xff08;YOLOv5 v6.0&#xff09; 2.1 训练权重.pt转onnx 环境配置 将requiements.txt中export部分的注释恢复 然后pip insta…

《昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐》

学习内容&#xff1a;基于MindSpore的GPT2文本摘要 1.模型简介 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型&#xff08;LM&#xff09;的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量的音乐样本&#xff0c;相关研究成果参考论文《Simp…

C语言 | Leecode C语言题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*//*假定 num1&#xff0c;num2 为出现次数大于 nums.length / 3 的两个数。&#xff08;最多出现两个&#xff09;遍历 nums&#xff0c; 若出现 num1、num2…

论文研读:ViT-V-Net—用于无监督3D医学图像配准的Vision Transformer

目录 摘要 介绍 方法 VIT-V-Net体系结构 损失函数 图像相似性度量 变形场正则化 结果与讨论 摘要 在过去的十年里&#xff0c;卷积神经网络(ConvNets)在各种医学成像应用中占据了主导地位并取得了最先进的性能。然而&#xff0c;由于缺乏对图像中远程空间关系的理解&a…

代码报错:There‘s no Qt version assigned to project Project.vcxproj

错误 Theres no Qt version assigned to project Project.vcxproj for configuration Release/Win32. Please assign a Qt installation in Qt Project Settings. Project C:\Users\FA-02405\AppData\Local\QtMsBuild\qt_vars.targets 68 1.设置qt Versions 选择…

2017-2023年全国土地利用分类(新增2023年,空间分辨率10米)

2017-2023年全国土地利用分类数据 数据介绍 本文分享一份全国范围的土地利用分类数据。 该数据来源于Esri&#xff0c;以Sentinel-2卫星的遥感图作为数据源&#xff0c;并结合人工智能土地分类模型制作而成。 该数据的时间范围是2017年-2023年&#xff0c;空间分辨率是10米&…

OSU!题解(概率dp)

题目&#xff1a;OSU! - 洛谷 思路&#xff1a; 设E()表示截止到i所获得的分数&#xff1b; 对于到i点的每一个l&#xff0c;如果第i1点为1&#xff0c;那么会新增分数3*l^23*l1; 就有递推公式方程&#xff1a; E()E()p[i1]p*(3*l^23*l1);(p代表截止到i获得长度l的概率)&a…

角点检测及MATLAB实现

一、角点简介 角点通常指的是两条直线构成角时的交点。‌在更广泛的应用中&#xff0c;‌角点这一概念也被扩展到数字图像处理领域&#xff0c;‌其中角点被定义为图像中物体轮廓线的连接点&#xff0c;‌这些点在某方面属性特别突出&#xff0c;‌即在某些属性上强度最大或者最…

如何通过SSH协议使用WinSCP实现Windows与Linux之间的远程公网文件传输

目录 ⛳️推荐 前言 1. Windows传输文件至Linux 2. WinSCP使用公网TCP地址连接 3. WinSCP使用固定公网TCP地址访问服务器 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前…

QT通用配置文件库(QPreferences)

QT通用配置文件库(QPreferences) QPreferences项目是基于nlohmann/json的qt可视化配置文件库&#xff0c;将配置保存成json格式&#xff0c;并提供UI查看与修改&#xff0c;可通过cmake可快速添加进项目。默认支持基本类型、stl常用容器、基本类型与stl容器组成的结构体&#…

C#知识|账号管理系统:添加账号的功能笔记

哈喽,你好啊,我是雷工! 本节记录账号管理系统中添加账号的逻辑过程,以下为学习笔记。 01 实现内容 ①:实现当点击【保存到数据库】按钮时,将账号名称、原创篇数、账号简介、账号类型显示的内容存储到LGAccountManagerDB数据库的Account表中; ②:实现点击【保存到数据库…

手势控制机械手

机械手的手势控制 思路: 1 通过摄像头实现手势识别 2 将识别后的手势数据通过计算拇指与中指指尖的距离计算出舵机需要旋转的角度 3 将数据通过mqtt发送给mqtt服务器 4 硬件通过mqtt获取需要旋转的角度控制舵机旋转 开发环境: 硬件: ESP8266、舵机 硬件代码: 软件环…

颗粒饲料机器,打造成套饲料生产线

无论您是大型养殖场还是小型养殖户&#xff0c;我们的颗粒饲料机器能满足您的需求。我们致力于为客户打造成套饲料生产线&#xff0c;让您在养殖业中脱颖而出。 &#x1f680; 开启养殖新时代&#xff0c;您的饲料生产线升级设备&#xff01; 还在为饲料生产烦恼吗&#xff1f…

【笔记-MyBatis】StatementHandler

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-15 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 简介 StatementHandler封装了对JDBC各类Statement的操作&#xff0c;如设置fetchSize属性、设置查询超时时间、与数据库进行交互等&…

第一节Linux常见指令

目录 1.Linux下基本指令 ls指令 pwd 命令 cd 指令 知识点:理解树形结构 touch 指令 mkdir指令(重要) rmdir指令 && rm指令(重要) 知识点:ls file* 可以找到当前目录下任何以file开头的文件​编辑 知识点:热键 man指令()重要 补充知识点:nano cp…

解锁Mac与Windows无缝协作新纪元:Tuxera NTFS for Mac 2022 —— 高效读写,畅享双系统自由

Tuxera NTFS for Mac 2022&#xff0c;作为一款专为Mac用户设计的文件系统驱动插件&#xff0c;它彻底打破了Mac与Windows之间在文件读写上的界限&#xff0c;为用户带来了前所未有的跨平台体验。 这款插件让Mac用户能够轻松访问、读取并写入NTFS格式的硬盘或U盘&#xff0c;无…

C++第七弹 -- C/C++内存管理

目录 前言一. C/C内存分布二. C语言中动态内存管理方式三. C中动态内存管理四. operator new与operator delete函数五. new和delete的实现原理1.内置类型2. 自定义类型 六. 定位new表达式(placement-new)七. 常见面试题总结 前言 在C/C编程中&#xff0c;内存管理是至关重要的…

jwt复习及ctfshow做题

Jwt复习总结 JWT简介 JWT即Json Web Token的缩写&#xff0c;顾名思义&#xff0c;是Token的一种。它常被用来在向服务器发起请求时用作身份认证。使用JWT作为身份认证的优势在于&#xff1a;它不需要在服务端去保留用户的认证信息。仅需要对该Token正确性进行校验即可,这就意…

张量分解(4)——SVD奇异值分解

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

那一单,教会我的不只是后悔

在销售行业中&#xff0c;每一笔成交都是一场精心策划的战役。每一个细节、每一次沟通都需要谨慎处理&#xff0c;以防辛苦建立的信任大厦瞬间崩塌。然而&#xff0c;即便是最小心谨慎的人也难免会犯错。我的一位好友&#xff0c;我们姑且称他为杰克&#xff0c;在一次不经意间…