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

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.mzph.cn/news/872228.shtml

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

相关文章

让AI语言模型自由飞翔:LangChain框架的奇妙世界

今天&#xff0c;我将为大家揭开一项令人激动的技术——LangChain。想象一下&#xff0c;如果能将人工智能的强大能力与我们日常使用的数据和工具无缝连接&#xff0c;那将开启怎样崭新且无限的可能&#xff01; LangChain&#xff0c;一个专为大型语言模型设计的框架&#xf…

TG创建小程序交互APP登录以及机器人信息

1、搜索 BotFather &#xff0c;输入命令 /newbot 创建机器人。 2、修改机器人信息 /mybots 编辑名称 : 修改机器人名称 编辑关于: 修改关于 hayden yyds&#xff0c;修改以后打开机器人会出现在下图 编辑描述 : 机器人的描述 编辑描述图片 : 机器人的图片 编辑 Botpic…

瑞幸私域运营案例拆解

1. 私域运营概述 私域运营是一种以用户为中心的运营模式&#xff0c;通过建立和维护与用户之间的直接联系&#xff0c;实现品牌与用户之间的深度互动和长期价值挖掘。 1.1 私域流量定义 私域流量指的是企业通过自有渠道&#xff0c;如微信公众号、小程序、社群等&#xff0c…

SQL进阶技巧:如何按照固定尺寸(固定区间)对数据进行打分类标签?

目录 0 问题引入 应用案例1 应用案例2 小结 0 问题引入 在日常数据分析中,经常会遇到数据产品经理或数据分析师提出这样的需求,比如按照某一给定的区间或数据范围对数据进行分类标签,而遇到这样的问题,好多同学感觉SQL做起来有点困难或无从下手,其实面对这样的问题笔者…

[C++] 匿名命名空间

匿名命名空间是C中的一种特性&#xff0c;它允许你在不指定名称的情况下声明一个命名空间。这种命名空间主要用于局部作用域&#xff0c;例如在一个源文件的顶层&#xff0c;来限制符号的作用范围&#xff0c;从而避免全局命名空间中的命名冲突。 匿名命名空间中的所有声明都自…

.gitignore配置文件不生效的问题

一、问题描述&#xff1a; 在已经提交过的git管理的项目中&#xff0c;新增加一个.gitignore文件&#xff0c;或者修改.gitignore文件之后&#xff0c;新增的忽略内容不生效 二、问题原因&#xff1a; gitignore文件只能作用于Untracked Files的文件&#xff0c;也就是那些从…

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释&#xff1a; RTCM响应消息1020为GLONASS星历信息&#xff0c;暂不介绍&#xff0c;前公司暂未研发RTCM消息类型版本的DR/RTK模块&#xff0c;DR/RTK模块仅NMEA消息类型使用 注释&#xff1a; 公司使用的多信号语句类型为MSM4&MSM7&#xff0c;也应该是运用最广泛的语句…

暑期备考2024上海初中生古诗文大会:单选题真题和独家解析

现在距离2024年初中生古诗文大会初选还有不到4个月&#xff08;11月3日正式开赛&#xff09;&#xff0c;我们继续来看10道选择题真题和详细解析。为帮助孩子自测和练习&#xff0c;题目的答案和解析统一附后。 本专题持续分享。 一、上海初中古诗文大会历年真题精选(参考答案…

探索IP形象设计:快速掌握设计要点

随着市场竞争的加剧&#xff0c;越来越多的企业开始关注品牌形象的塑造和推广。在品牌形象中&#xff0c;知识产权形象设计是非常重要的方面。在智能和互联网的趋势下&#xff0c;未来的知识产权形象设计可能会更加关注数字和社交网络。通过数字技术和社交媒体平台&#xff0c;…

等保测评是什么 怎么做

在信息安全日益受到重视的今天&#xff0c;等保测评已成为企事业单位不可或缺的安全合规活动。然而&#xff0c;对于等保测评的理解和实施&#xff0c;仍存在诸多误区。本文将对等保测评的周期、法律责任、网络环境、测评对象、费用及常见误区进行深入解析&#xff0c;以期帮助…

源码安装zabbix5.0.36完整版

源码安装zabbix5.0.36完整版 环境&#xff1a;CentOS Linux release 7.9&#xff0c;cpu:16&#xff0c;mem:32G软件包如下&#xff1a; zabbix-5.0.36.tar.gz mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz nginx-1.6.2.tar.gz 1. 配置前准备 systemctl stop firewa…

[MySQL][表的增删查改][二][Retrieve][SELECT][WHERE]详细讲解

目录 1.Retrieve1.基本语法2.SELECT列1.全列查询2.查询字段为表达式3.为查询结果指定别名4.结果去重 3.WHERE条件1.比较运算符2.逻辑运算符3.示例 4.结果排序1.基本语法2.示例 5.筛选分页结果 1.Retrieve 1.基本语法 SELECT [DISTINCT] * | {column [, column] ...} [FROM ta…

基于pytesseract的OCR图片识别

简介 pytesseract是基于谷歌的tesseract的OCR包&#xff0c;支持识别一些简单的数字、字母、中文。 安装 安装引擎 下载地址&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 一般是Windows 64位系统最新版&#xff1a; 如果要识别中文&#xff0c;注意选中中文…

【微服务】Spring Cloud Config解决的问题和案例

文章目录 强烈推荐引言解决问题1. 配置管理的集中化2. 配置的版本控制3. 环境特定配置4. 配置的动态刷新5. 安全管理敏感数据6. 配置的一致性 组件1. **配置服务器&#xff08;Config Server&#xff09;**2. **配置客户端&#xff08;Config Client&#xff09;** 配置示例配置…

十一、(正点原子)Linux异步通知

一、简介 我们首先来回顾一下“中断”&#xff0c;中断是处理器提供的一种异步机制&#xff0c;我们配置好中断以后就可以让处理器去处理其他的事情了&#xff0c;当中断发生以后会触发我们事先设置好的中断服务函数&#xff0c;在中断服务函数中做具体的处理。 Linux …

JVM常见知识点总结

最近在看关于JVM的一些知识点&#xff0c;之前也有了解过&#xff0c;可是时间一长就总会忘&#xff0c;索性按照自己的记忆方式去回顾一下知识点。 首先&#xff0c;jvm是Java程序运行的环境&#xff0c;全称为Java Virtual Machine 当我们写好的Java文件经过javac编译后就变成…

Java求最大公约数和最小公倍数

求最大公约数和最小公倍数&#xff0c;Java实现代码如下&#xff1a; public class LcmDemo {public static void main(String[] args) {int num1 18;int num2 30;System.out.println("最大公约数&#xff1a;" gcd(num1, num2));System.out.println("最小公…

Java SE—基本数据类型(详细讲解)

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约 ⏩收录专栏⏪&#xff1a;Java SE &#x1f921;往期回顾&#x1f921;&#xff1a;Python 神器&#xff1a;wxauto 库——解锁微信自动化的无限可能 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f3…

使用Docker Compose进行多容器应用部署

在现代软件开发中&#xff0c;容器化技术改变了我们部署和管理应用程序的方式。Docker作为容器化技术的领导者&#xff0c;提供了一个轻量级且高效的方式来打包和运行应用程序。而Docker Compose则进一步简化了多容器应用的管理&#xff0c;它允许你使用一个docker-compose.yml…

售前工程师的AI大模型转型之路

随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;正逐渐成为IT行业的热点。对于售前工程师来说&#xff0c;转行大模型领域不仅意味着新的机遇&#xff0c;也面临着诸多挑战。本文将探讨售前工程师转行大模型领域的机遇与挑战…