C语言初阶—函数
函数:子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成,它负责完成某项特定任务,而且相较于其他代码,具有相对独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库。
库函数
可以在Reference - C++ Reference (cplusplus.com)上查看库函数的详细介绍。
char * strcpy ( char * destination, const char * source );

#include <stdio.h>
#include <string.h>//char * strcpy ( char * destination, const char * source );
int main()
{char arr1[20] = {0};char arr2[20] = "Hello World!";strcpy(arr1,arr2);printf("%s\n",arr1);return 0;
}

void * memset ( void * ptr, int value, size_t num );

#include <stdio.h>
#include <string.h>//void * memset ( void * ptr, int value, size_t num );
int main()
{char arr1[20] = "Hello World!";memset(arr1,'$',5);printf("%s\n",arr1);return 0;
}

数组名就是首元素地址,可以把首元素地址加上数字,再配合后面的num,可以达到对字符数组即字符串内任意位置的字符进行修改。
#include <stdio.h>
#include <string.h>//void * memset ( void * ptr, int value, size_t num );
int main()
{char arr1[20] = "Hello World!";memset(arr1+6,'$',5);printf("%s\n",arr1);return 0;
}

使用库函数时,必须包含对应的头文件。
自定义函数
求两个数中的最大值
#include <stdio.h>
#include <string.h>int get_max(int a,int b){if(a >= b)return a;elsereturn b;//return (a > b ? a : b);
}
int main()
{//求两个数中的最大值int a = 0;int b = 0;int c = 0;scanf("%d %d",&a,&b);//c = (a > b ? a : b);c = get_max(a,b);printf("%d\n",c);return 0;
}
交换两个数,注意形参和实参的区别,传值和传址的区别。
如果不用指针传地址的话,交换的只是形参,而不会改变实参,从而达不到通过函数来交换数据的效果。
#include <stdio.h>
#include <string.h>void swap(int x,int y){int z = x;x = y;y = x;
}
int main()
{//交换两个数int a = 0;int b = 0;int c = 0;scanf("%d %d",&a,&b);swap(a,b);printf("%d %d\n",a,b);return 0;
}
结果如图,并没有达到交换的效果:

通过调试可以看出,a,b和x,y地址不同,是完全不同的两个变量,交换形参x和y的值并不能交换a和b的值。

当实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参。
应该传递变量的地址,通过对地址解引用来改变变量的值。
#include <stdio.h>
#include <string.h>void swap(int* a,int* b){int c = *a;*a = *b;*b = c;
}
int main()
{//交换两个数int a = 0;int b = 0;int c = 0;scanf("%d %d",&a,&b);swap(&a,&b);printf("%d %d\n",a,b);return 0;
}

在需要修改实参的情况下,通过传址传参才能达到修改实参的效果。
一个工程中,可以有多个.c文件,但是只能有一个main函数。




函数可以嵌套调用,但是不能嵌套定义。
函数可以链式调用

#include <stdio.h>int main()
{printf("%d\n",printf("%d",printf("%d",43)));return 0;
}
先是 main 函数进去,然后 printf 一层层调用,先是最里层 printf 打印43,43是两个字符,所以 printf("%d",43) 返回值是 2 ,第二层 printf 相当于 printf("%d",2) ,所以第二层 printf 打印 2 ,2是 1 个字符,所以 printf("%d",2) 返回值是 1 ,第三层 printf 相当于 printf("%d",1) ,所以第三层 printf 打印 1 ,最后打印的结果就是4321,如图:

函数不写返回值的时候,默认返回类型是 int ,但还是建议写好返回值,这样更直观。在写好返回值但是不返回的时候,在一些编译器上返回的是函数执行过程中最后一条指令执行的结果。
int main(void)
{return 0;
}
这种写法是明确的说明,main函数不需要参数。
相关文章:
C语言初阶—函数
函数:子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成,它负责完成某项特定任务,而且相较于其他代码,具有相对独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏&a…...
vue3的router
需求 路由组件一般放在,pages或views文件夹, 一般组件通常放在component文件夹 路由的2中写法 子路由 其实就是在News组件里面,再定义一个router-view组件 他的子组件,机会渲染在router-view区域 路由传参 <RouterLink :to"/news…...
云时代【5】—— LXC 与 容器
云时代【5】—— LXC 与 容器 三、LXC(一)基本介绍(二)相关 Linux 指令实战:使用 LXC 操作容器 四、Docker(一)删除、安装、配置(二)镜像仓库1. 分类2. 相关指令…...
npm digital envelope routines::unsupported
问题描述:npm运行命令报错:digital envelope routines::unsupported 原因:node版本过高 解决方案:在运行命令之前加上 SET NODE_OPTIONS--openssl-legacy-provider && SET NODE_OPTIONS--openssl-legacy-provider &&a…...
深入理解Flutter中的StreamSubscription和StreamController
在Flutter中,StreamSubscription和StreamController是处理异步数据流的重要工具。它们提供了一种方便的方式来处理来自异步事件源的数据。本文将深入探讨它们的区别以及在实际应用中的使用场景。 StreamSubscription StreamSubscription代表了对数据流的订阅&…...
聊聊 HTTP 性能优化
作为用户的我们在 "上网冲浪" 的时候总是希望快一点,尤其是抢演唱会门票的时候,但是现实并非如此,有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础,从网站打开速度到移动应用的响应…...
六、防御保护---防火墙内容安全篇
攻击可能只是一个点,防御需要全方面进行 DPI --- 深度包检测技术 --- 主要针对完整的数据包(数据包分片,分段需要重组),之后对 数据包的内容进行识别。(应用层) 1,基于“特征字”的…...
HC32F460 是否有 RTC?在电池供电方案中该如何使用?
[技术问答]HC32F460 是否有 RTC?在电池供电方案中该如何使用?_hc32f460 rtc-CSDN博客 华大HC32A460 系列介绍(三)_华大单片机内部温度传感器-CSDN博客 HC32F460PETB-LQFP100-华大半导体有限公司 [【HC32F460开发板测评】…...
HTML---表单验证
文章目录 目录 本章目标 一.表单验证概述 二.表单选择器 属性过滤选择器 三.表单验证 表单验证的方法 总结 本章目标 掌握String对象的用法会使用表单选择器的选择页面元素会使用JQuery事件进行表单验证Ajax的概念和作用 一.表单验证概述 前端中的表单验证是在用户提交表…...
基于tomcat的JavaWeb实现
Tomcat服务器 免费,性能一般的服务器 安装配置 基于Java,故需要配置环境变量,新加系统路径JAVA_HOME,路径为jdk的主目录。 而后打开bin目录下的startup.bat文件出现如下窗口说明配置成功 idea继承tomcat服务器 使用java开发…...
AI时代编程新宠!如何让孩子成为未来的编程大师?
文章目录 一、了解编程的基础概念二、选择适合的编程工具三、激发孩子的兴趣四、注重基础能力的培养五、提供实践机会六、鼓励孩子与他人合作七、持续支持与鼓励《信息学奥赛一本通关》本书定位内容简介作者简介目录 随着科技的迅猛发展,编程已经从一种专业技能转变…...
Qt 中Json的构造和解析简单例子
概述: Qt中使用Json比较方便,不像纯C需要导入CJson RapidJson JsonCpp等第三方的库,主要使用到QJsonDocument、QJsonObject对象即可 1、如何构造一个json字符串 假如我们需要构造 {"cmd":"1001","data":{"content&q…...
CSS特性
小技巧:在调试工具中,css样式上看层叠,下看继承。 1、层叠性 相同的属性会被覆盖,不同的属性会叠加 2、继承性 3、优先级 基于不同种类的选择器的匹配规则。 通配符 < 标签 < 类选择器 < id选择器 < 行内样式 <…...
springcloud:3.1介绍雪崩和Resilience4j
灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…...
实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器
前言: 当我有一个开发需求,符合下面的条件 1.需要某个任务在程序中每隔一段时间就要执行一次,可能把这个任务封装成了一个函数。 2.这种需要定时执行的任务,有2个,3个....越来越多。 这个时候我们就可以考虑使用定时…...
H5:图像标签和路径
目录 一.前言 二.正文 1.图像标签 注意: 2.路径 Ⅰ.目录文件夹和根目录 Ⅱ.路径 三.结语 一.前言 本篇介绍有关标签和路径,关于图像标签我们来看看有什么需要注意的。 二.正文 1.图像标签 在HTML标签中,img标签用于定义HTML页面中的图像。 <im…...
AI学习(5):PyTorch-核心模块(Autograd):自动求导
1.介绍 在深度学习中,自动求导是一项核心技术,它使得我们能够方便地计算梯度并优化模型参数。PyTorch 提供了一个强大的自动求导模块(Autograd),它可以自动计算张量的导数得出梯度信息,同时也支持高阶导数计算。 1.1 概念词 在学…...
Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读
Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读 摘要简介方法3.1 Normal Representation3.2 Feature Refinement3.3 Training and Inference 4 实验结果5 总结 文章信息: 原文链接:https://arxiv.org/abs/2402.18293 源码…...
FaceBook获取广告数据
1、访问 广告管理工具 确认自己登陆的账号下面能看到户。 2、使用 图谱Api探索工具 生成用户短期口令 3、get请求(或者浏览器直接打开)访问: https://graph.facebook.com/v19.0/me?fieldsid,name, email&access_token{上一步生成的口令} 4、短期…...
Redis之十:Spring Data Redis --- CrudRepository方式
SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD(创建、读取、更新和删除)操作的一个接口。在与 Redis 集成时,尽管 Redis 是一个键值存储系统,并没有像关系型…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
