C语言·函数(超详细系列·全面总结)
前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下函数的知识点,我们一起来看看吧!
目录
一、函数是什么 💫
二、C语言中函数的分类 💫
1、⭐️库函数⭐️
2.1、🌈库函数的使用
2.2、🌈常用的库函数
2、⭐️自定义函数⭐️
三、函数的组成 💫
1、⭐️函数的基本组成⭐️
2、⭐️函数的参数⭐️
2.1、🌈实际参数(实参)
2.2、🌈形式参数(形参)
2.3、🌈实参与形参的匹配
3、⭐️函数的声明和定义⭐️
3.1、🌈函数声明
3.2、🌈函数的定义
四、函数的调用 💫
五、函数的嵌套调用和链式访问 💫
1、⭐️嵌套调用⭐️
2、⭐️链式访问⭐️
六、函数递归 💫
1、⭐️什么是递归?⭐️
2、⭐️递归的两个必要条件⭐️
3、⭐️递归的基本原理⭐️
4、⭐️递归实例⭐️
💞心跳sy的C语言专栏💞⏪C语言知识点汇总到这了,有兴趣的友友可以订阅看看哟~
一、函数是什么 💫
👉在C语言中,函数是一段完成特定任务的代码块,它可以被多次调用,接受输入参数并可选地返回一个值;函数是结构化编程的基础,允许程序员将一个大问题分解为多个小问题,每个小问题由一个函数来封装,这种方式提高了代码的可读性、可维护性和可重用性。
二、C语言中函数的分类 💫
1、⭐️库函数⭐️
⭕️C语言库函数是指在C语言标准库中预先定义好的函数,这些函数包含在相应的头文件里,每个函数都有其函数名、返回值类型和函数参数;这些函数用于执行常见的任务,例如输入输出、字符串处理、内存操作等。
⭕️C语言标准库是一组标准化的函数和工具,旨在为C语言程序员提供基本的编程支持。库函数通常以源代码形式或预编译形式提供,可以直接在C程序中使用,而无需从零开始编写这些功能的代码;以下情况使用的函数都属于库函数:
🔶比如我们想把程序结果打印到屏幕上看看,会频繁的使用一个功能:将信息按照一定的格式打印到屏幕上(printf)。
🔶在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。
🔶在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。
2.1、🌈库函数的使用
👉要在C程序中使用库函数,首先需要包含相应的头文件。例如,使用 printf 函数需要在程序顶部添加以下代码:
#include <stdio.h>
👉然后,就可以在程序中调用 printf 函数了:
int main() {printf("Hello, World!\n");return 0;
}
2.2、🌈常用的库函数
🎀简单的总结,C语言常用的库函数都有:
🔸IO函数
🔸字符串操作函数
🔸字符操作函数
🔸内存操作函数
🔸时间/日期函数
🔸数学函数
🔸其他库函数
🍀因为具体的函数太多了,这里不一一列举了,我们在日常学习中,需要养成查询库函数使用方法的习惯哦,这里分享一个查询库函数的网站:👉http://en.cppreference.com(英文版)
2、⭐️自定义函数⭐️
❓如果库函数能干所有的事情,那还要程序员干什么?
⭕️所以更加重要的是自定义函数;自定义函数和库函数一样,有函数名,返回值类型和函数参数,但是与库函数不一样的是这些都是我们自己来设计,这就给程序员了一个很大的发挥空间。
👉我们来看一个自定义的函数实现找出两个整数中的最大值:
#include <stdio.h>
//get_max函数的设计int get_max(int x, int y)
{return (x>y)?(x):(y);
}int main()
{int num1 = 10;int num2 = 20;int max = get_max(num1, num2);printf("max = %d\n", max);return 0;
}
👉其中 get_max 就是我们自己定义的函数,用于实现求两整数最大值的算法,并在主函数中调用,用 max 来接收返回值。
三、函数的组成 💫
1、⭐️函数的基本组成⭐️
👉一个C语言函数通常由以下几个部分组成:
💠返回类型:指定函数返回的数据类型。如果函数不返回任何值,则使用 void 。
💠函数名:函数的名称,用于调用该函数。
💠参数列表:一组定义在圆括号内的参数,用于接受调用者传递给函数的数据。参数可以是多种数据类型,甚至是其他函数。
💠函数体:包含在花括号 { } 中的代码块,这里包含了函数执行的具体逻辑。
⭕️其中返回类型指定了函数执行完毕后返回的数据类型,可以是整型、字符型、各种指针类型等,如果函数不返回任何值,则使用 void。例如,int 表示函数返回一个整数,void 表示函数不返回任何值。
⭕️函数名是函数的标识符,用于在程序中调用该函数。我们在写函数时,函数名应该清晰地反映函数的目的或行为。
👉下面具体讲解如何使用函数:
2、⭐️函数的参数⭐️
2.1、🌈实际参数(实参)
❓什么是实参?
⭕️真实传给函数的参数,叫实参;
⭕️实参可以是:常量、变量、表达式、函数等;
⭕️无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
int main() {int years = 30;char* person = "Alice";printMessage(years, person); // 函数调用,years 和 person 是实参return 0;
}
在这个例子中,years 和 person 就是实参。
2.2、🌈形式参数(形参)
⭕️形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单元),所以叫形式参数。
⭕️形式参数当函数调用完成之后就自动销毁了,因此形式参数只在函数中有效。
⭕️在函数定义时,形参由它们的类型和名称组成,例如:
void printMessage(int age, char* name) {printf("Name: %s, Age: %d\n", name, age);
}
在这个例子中,age 和 name 就是形参。
2.3、🌈实参与形参的匹配
⭕️在函数调用时,C语言编译器会检查实参与形参的类型和数量是否匹配。如果实参与形参的类型和数量不匹配,可能会导致编译错误或运行时错误。
👉例如,以下代码将导致编译错误,因为printMessage 函数期望两个参数,但只提供了一个:
printMessage("Bob"); // 编译错误:缺少参数
3、⭐️函数的声明和定义⭐️
3.1、🌈函数声明
🔶在调用函数之前,必须声明函数。函数声明定义了函数的接口,使得函数可以在其他部分被调用,它通常放在程序的顶部或头文件中,包括函数名、返回类型和参数列表。
👉例如:
int add(int a, int b); // 声明一个返回int类型,接受两个int参数的函数
3.2、🌈函数的定义
🔶函数定义是函数的实际实现,它包括函数声明的所有部分,再加上函数体(函数体是一组语句,它们定义了当函数被调用时执行的操作)例如:
int add(int a, int b) { // 函数定义int result = a + b;return result;
}
四、函数的调用 💫
🔶函数调用是执行函数的过程。要调用一个函数,只需使用函数名并提供必要的参数(如果函数有参数的话)。例如:
int sum = add(3, 5); // 调用add函数,并将返回值赋给sum变量
👉完整的调用如下:
#include <stdio.h>// 函数声明
int add(int a, int b);// 函数定义
int add(int a, int b)
{int sum = a + b;return sum;
}int main()
{int result = add(10, 20); // 函数调用printf("Result: %d\n", result);//输出30return 0;
}
五、函数的嵌套调用和链式访问 💫
1、⭐️嵌套调用⭐️
#include <stdio.h>void new_line()
{printf("hehe\n");
}void three_line()
{int i = 0;for(i=0; i<3; i++){new_line();//继续调用}
}int main()
{three_line();return 0;
}
🔴注意:函数可以嵌套调用,但是不能嵌套定义
2、⭐️链式访问⭐️
⭕函数链式访问(也称为函数链式调用)是一种编程技巧,是把一个函数的返回值作为另外一个函数的参数来调用。
#include <stdio.h>
#include <string.h>int main()
{char arr[20] = "hello";int ret = strlen(strcat(arr,"bit"));//求字符串长度printf("%d\n", ret);return 0;
}
六、函数递归 💫
1、⭐️什么是递归?⭐️
⭕程序调用自身的编程技巧称为递归( recursion);函数递归是指函数在执行过程中调用自身的一种技术。
2、⭐️递归的两个必要条件⭐️
⭕递归函数通常包含两部分:基线条件和递归条件;
⭕基线条件是递归函数停止递归的条件,而递归条件是递归函数继续调用自身的条件。递归是一种强大的编程技术,它可以使代码更简洁、更优雅,但需要小心使用,以避免无限递归导致的栈溢出等问题。
3、⭐️递归的基本原理⭐️
⭕递归函数通过反复调用自身来解决问题,每次调用时问题规模都会减小,直到达到基线条件,递归停止。递归函数在调用自身时,会创建一个新的函数栈帧,用于存储局部变量和参数。当递归结束时,这些栈帧会依次弹出,恢复到最初的调用状态。
4、⭐️递归实例⭐️
👉 计算阶乘:
#include <stdio.h>// 递归函数:计算阶乘
int factorial(int n)
{// 基线条件if (n == 0){return 1;}// 递归条件else {return n * factorial(n - 1);}
}int main()
{int num = 5;int result = factorial(num);printf("%d! = %d\n", num, result);return 0;
}
⭕factorial 函数是一个递归函数,它计算并返回一个整数的阶乘。当 n 等于0时,函数返回1,这是基线条件。否则,函数调用自身,并返回 n 乘以 factorial (n-1) 的结果
🔶当调用 factorial(5) 时,以下是函数调用的过程:
🔸第一次调用:factorial(5) 因为 n 不等于0,所以执行 return 5* factorial(4) ,这次调用会暂停,等待 factorial(4) 的结果。
🔸第二次调用:factorial(4) n 不等于0,执行 return 4* factorial(3) ,这次调用会暂停,等待factorial(3) 的结果
🔸如此下去直到第六次调用,factorial(0), n 等于0,所以触发基线条件,返回1。
🔷当 factorial(0) 返回1时,递归调用开始依次返回:
🔹第五次调用返回:factorial(1),返回 1*1=1
🔹第四次调用返回:factorial(2),返回 2*1=2
🔹第三次调用返回:factorial(3),返回 3*2=6
🔹第二次调用返回:factorial(4),返回 4*6=24
🔹第一次调用返回:factorial(5),返回 5*24=120
👉最终得出5的阶乘为120。
函数篇到此结束💞💞💞感谢大家花费宝贵的时间阅读本文章,制作不易,希望大家多多支持呀😘😘😘,如有任何问题欢迎各位大佬在评论区批评指正!!!
相关文章:
C语言·函数(超详细系列·全面总结)
前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下函数的知识点,我们一起来看看吧! 目录 一、函数是什么 &a…...
Windows及Linux系统加固
君衍. 一、Windows加固1、配置简介2、账户配置3、本地配置4、安全设置 二、Linux加固1、配置简介2、网络配置3、日志和审计配置4、访问认证和授权配置5、系统运维配置 一、Windows加固 1、配置简介 通常在Windows安全配置中有两类对象 一类是Windows Server,如win …...
Postman安装使用教程(详解)
目录 一、Postman是什么 二、安装系统要求 三、下载Postman 四、注册和登录Postman 五、创建工作空间 六、创建请求 一、Postman是什么 在安装之前,让我们先来简单了解一下Postman。Postman是一个流行的API开发工具,它提供了友好的用户界面用于发送…...
【嵌入式开发之标准I/O】文件I/O的基本概念,打开、关闭、定位函数及实例
文件I/O和标准I/O 什么是文件I/O?什么是标准I/O? 文件I/O:文件I/O又称系统IO,系统调用,称之为不带缓存的IO(unbuffered I/O)。是操作系统提供的API接口函数。不带缓存指的是每个read,write都调用内核中的一个系统调…...
C++文件操作-文本文件-读文件
第一种 #include<iostream>//1、包含头文件 fstream #include<fstream> using namespace std;void test01() {//2、创建流对象ifstream ifs;//3、打开文件 并且判断是否打开成功ifs.open("test.txt", ios::in);if (!ifs.is_open()){cout << "…...
二叉树精选面试题
💎 欢迎大家互三:2的n次方_ 1. 相同的树 100. 相同的树 同时遍历两棵树 判断结构相同:也就是在遍历的过程中,如果有一个节点为null,另一棵树的节点不为null,那么结构就不相同 判断值相同:只需…...
如何在 Android 中删除和恢复照片
对于智能手机用户来说,相机几乎已经成为一种条件反射:你看到值得注意的东西,就拍下来,然后永远保留这段记忆。但如果那张照片不值得永远保留怎么办?众所周知,纸质快照拿在手里很难舍弃,而 Andro…...
HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(六)
一、仅支持一个静态块 规则:arkts-no-multiple-static-blocks 级别:错误 ArkTS不允许类中有多个静态块,如果存在多个静态块语句,请合并到一个静态块中。 TypeScript class C {static s: stringstatic {C.s aa}static {C.s C.s …...
功能测试与APPSCAN自动化测试结合的提高效率测试策略
背景 手工探索性测试(Manual Exploratory Testing,简称MET)是一种软件测试方法,它依赖于测试人员的直觉、经验和即兴发挥来探索应用程序或系统。与传统的脚本化测试相比,手工探索性测试不遵循固定的测试脚本࿰…...
AVL树的理解和实现[C++]
文章目录 AVL树AVL树的规则或原理 AVL树的实现1.节点的定义2.功能和接口等的实现默认构造函数,析构函数拷贝构造函数插入搜索打印函数检查是否为平衡树,检查平衡因子旋转 AVL树 AVL树,全称Adelson-Velsky和Landis树,是一种自平衡…...
云计算遭遇的主要安全威胁
以下是详细说明云计算遭遇的所有主要安全威胁: 1. 数据泄露 描述:数据泄露是指未经授权的情况下访问和获取敏感数据。云计算环境中的数据泄露通常由于不安全的配置、软件漏洞或内部威胁造成。 案例: Capital One数据泄露:2019…...
[MySQL]02 存储引擎与索引,锁机制,SQL优化
Mysql存储引擎 可插拔式存储引擎 索引是在存储引擎底层上实现的 inno DB MySQL默认存储引擎: inno DB高可靠性和高性能的存储引擎 DML操作遵循ACID模型支持事务行级锁,提高并发访问性能支持外键 约束,保证数据完整性和可靠性 MySAM MySAM是MySQL的早期引擎 特点: 不支持事…...
ld,GNU 链接器介绍以及命令行参数详解
ld,GNU 链接器介绍以及命令行参数详解 当我们使用GCC编译源代码生成可执行程序,经过预处理、汇编、编译、链接四个阶段。 链接器(Linker)将多个目标文件和库文件链接起来,链接器还解决目标文件之间的符号引用ÿ…...
[web]-反序列化-base64
看到源码 <?php error_reporting(0); class A {public $contents "hello ctfer";function __toString(){if ((preg_match(/^[a-z]/i,$this->contents))) {system("echo $this->contents");return 111;}else{return "...";}} }functi…...
【医学影像】RK3588+FPGA:满足远程诊疗系统8K音视频编解码及高效传输需求
医学影像 提供基于Intel平台、NXP平台、Rockchip平台的核心板、Mini-ITX主板、PICO-ITX主板以及工业整机等计算机硬件。产品板载内存,集成超高清编码/解码视频引擎,具有出色的数据处理能力和图形处理能力,功能高集成,可应用于超声…...
昇思25天学习打卡营第16天|基于MindSpore通过GPT实现情感分类
文章目录 昇思MindSpore应用实践1、基于MindSpore通过GPT实现情感分类GPT 模型(Generative Pre-Training)简介imdb影评数据集情感分类 2、Tokenizer导入预训练好的GPT3、基于预训练的GPT微调实现情感分类 Reference 昇思MindSpore应用实践 本系列文章主…...
服务器借助笔记本热点WIFI上网
一、同一局域网环境 1、当前环境,已有交换机组网环境,服务器已配置IP信息。 设备ip服务器125.10.100.12交换机125.10.100.0/24笔记本125.10.100.39 2、拓扑图 #mermaid-svg-D4moqMym9i0eeRBm {font-family:"trebuchet ms",verdana,arial,sa…...
开发实战中Git的常用操作
Git基础操作 1.初始化仓库 git init解释:在当前目录中初始化一个新的Git仓库。 2.克隆远程仓库 git clone <repository-url>解释:从远程仓库克隆一个完整的Git仓库到本地。 3.检查当前状态 git status解释:查看当前工作目录的状态…...
python调用chrome浏览器自动化如何选择元素
功能描述:在对话框输入文字,并发送。 注意: # 定位到多行文本输入框并输入内容。在selenium 4版本中,元素定位需要填写父元素和子元素名。 textarea driver.find_element(By.CSS_SELECTOR,textarea.el-textarea__inner) from …...
深入理解JS中的排序
在JavaScript开发中,排序是一项基础而重要的操作。本文将探讨JavaScript中几种常见的排序算法,包括它们的原理、实现方式以及适用场景。 1、冒泡排序 1.1、原理 通过比较相邻两个数的大小,交换位置排序:如果后一个数比前一个数小,则交换两个数的位置,重复这个过程,直…...
Kafka之存储设计
文章目录 1. 分区和副本的存储结构1. 分区和副本的分布2. 存储目录结构3. 文件描述 2. 相关配置3. 数据文件类型4. 数据定位原理LogSegment 类UnifiedLog 类 5. 副本数据同步HW水位线LEO末端偏移量HW更新原理 6. 数据清除 1. 分区和副本的存储结构 在一个多 broker 的 Kafka 集…...
Python面试整理-Python中的函数定义和调用
在Python中,函数是一种封装代码的方式,使得代码模块化和复用性更强。定义和调用函数是Python编程中的基本技能。以下是关于如何在Python中定义和调用函数的详细介绍: 函数定义 函数在Python中使用def关键字进行定义。函数体开始前,通常有一个可选的文档字符串(docstring)…...
HTTP协议、Wireshark抓包工具、json解析、天气爬虫
HTTP超文本传输协议 HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP 协议的重要特点: 一发一收…...
electron项目中实现视频下载保存到本地
第一种方式:用户自定义选择下载地址位置 渲染进程 // 渲染进程// 引入 import { ipcRenderer } from "electron";// 列表行数据下载视频操作,diffVideoUrl 是视频请求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…...
基于chrome插件的企业应用
一、chrome插件技术介绍 1、chrome插件组件介绍 名称 职责 访问权限 DOM访问情况 popup 弹窗页面。即打开形式是通过点击在浏览器右上方的icon,一个弹窗的形式。 注: 展示维度 browser_action:所有页面 page_action:指定页面 可访问绝大部分api 不可以 bac…...
unittest框架和pytest框架区别及示例
unittest框架和pytest框架区别及示例 类型unittest框架pytest框架unittest框架示例pytest框架示例安装python内置的一个单元测试框架,标准库,不需要安装第三方单元测试库,需要安装使用时直接引用 import unittest安装命令:pip3 install pyte…...
IDEA性能优化方法解决卡顿
文章目录 前言一、可以采取以下措施:二、VM Options的参数解释1. 内存设置2. 性能调优3. GC(垃圾回收)调优4. 调试和诊断5. 其它设置6.设置 VM Options 的步骤: 总结 前言 我们在使用 IntelliJ IDEA的时候有时候会觉得卡顿&#x…...
Mysql集合转多行
mysql 集合转多行 SELECT substring_index(substring_index(t1.group_ids, ,, n), ,, -1) AS group_id FROM (select 908,909 as group_ids ) t1, (SELECT rownum : rownum 1 AS n FROM ( SELECT rownum : 0 ) r, orders ) t2 WHERE n < ( LENGTH( t1.group_ids ) - LENGT…...
MFC:只允许产生一个应用程序实例的具体实现
在MFC(Microsoft Foundation Class)应用程序中,如果你想限制只允许产生一个应用程序实例,通常会使用互斥体(Mutex)来实现。这可以确保如果用户尝试启动第二个实例时,它会被阻止或将焦点返回到已…...
深入理解TCP/IP协议中的三次握手
👍 个人网站:【洛秋资源小站】 深入理解TCP/IP协议中的三次握手 在计算机网络中,TCP/IP协议是通信的基石。理解TCP/IP协议中的三次握手是掌握网络通信的关键步骤之一。本文将详细解释TCP/IP协议中的三次握手过程,探讨其工作原理&…...
【React】事件绑定、React组件、useState、基础样式
React 教程 目录 事件绑定 1.1. 基础实现 1.2. 使用事件参数 1.3. 传递自定义参数 1.4. 同时传递事件对象和自定义参数 React 组件 2.1. 组件是什么 2.2. 组件基础使用 useState:状态管理 3.1. 基础使用 3.2. 状态的修改规则 3.3. 修改对象状态 基础样式 4.1. 行…...
x264、x265、libaom 编码对比实验
介绍 x264 是一个开源的高性能 H.264/MPEG-4 AVC 编码器,它以其优秀的压缩比和广泛的适用性而闻名。x265 是一种用于将视频流编码成 H.265/MPEG-H HEVC 压缩格式的免费软件库和应用程序,以其下一代压缩能力和卓越的质量而闻名 。作为 x264 的继任者,x265 支持 HEVC 的 Main、…...
c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令
配置FTP服务 一.前言 博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且…...
Sphinx 安装相关指令解释
安装指令 pip3 install sphinx-autobuildpip3 install sphinx_rtd_themepip3 install sphinx_markdown_tablepip3 install sphinx_markdown_tables pip3 install sphinx-autobuild 功能:安装 sphinx-autobuild 包。作用:sphinx-autobuild 是一个工具&am…...
npm下载包-更改默认缓存目录
npm(Node Package Manager)的缓存目录是npm用于存储已下载包的本地位置,以便在后续安装相同包时能够快速复用,从而节省时间和带宽。npm缓存目录的具体位置会根据操作系统的不同而有所差异。 Windows系统 在Windows系统中&#x…...
PWM再理解(1)
前言 昨天过于劳累,十点睡觉,本来想梳理一下PWM,今天补上。 PWM内涵 PWM全称:Pulse Width Modulation,也就是脉宽调制的意思,字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…...
CSPVD 智慧工地安全帽安全背心检测开发包
CSPVD SDK适用于为各种智慧工地应用增加安全防护穿戴合规的检测能力,能够有效检测未戴安全帽和未穿 安全背心的人员,提供Web API和原生API。官方下载:CSPVD工地安全防护检测 1、目录组织 CSPVD开发包的目录组织说明如下: xlpr_…...
给常用Docker命令起别名,提高效率
在日常的开发和运维工作中,Docker是一款非常常用的工具。为了提高工作效率,我们可以为一些常用的Docker命令设置别名,这样可以更快速地执行这些命令。以下是如何给常用Docker命令起别名的详细步骤。 修改/root/.bashrc文件 首先,…...
基于深度学习的草莓成熟度实时检测系统(UI界面+YOLOv8/v7/v6/v5模型+完整代码与数据集)
1. 引言 在农业领域,草莓的成熟度检测是保证果实品质的重要环节。传统的方法依赖于人工经验,不仅耗时费力,还容易出错。本文介绍如何使用YOLO(You Only Look Once)系列模型(YOLOv8/v7/v6/v5)构…...
【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell
一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…...
Windows环境Apache配置解析PHP,以及配置虚拟主机详解
1. 安装 Apache 和 PHP 确保你已经安装了 Apache Web 服务器和 PHP。你可以从官方网站下载它们的 Windows 版本: Apache HTTP ServerPHP 2. 配置 Apache 配置 httpd.conf 文件 找到你的 Apache 安装目录下的 conf 文件夹中的 httpd.conf 文件,使用文…...
Redis高级篇—分布式缓存
目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…...
c++端的类,作为组件在qml端使用
qml使用c端的类,作为组件在qml端使用 这个类必须继承QObject 这个类必须继承QObject #ifndef COLLISIONALARM_H #define COLLISIONALARM_H#include <QObject>class CollisionAlarm : public QObject {Q_OBJECT//这个宏就叫做反射机制,让qml端直接…...
Android 14 适配之 - 全屏 intent 通知
全屏 intent 通知 在 Android 11(API 级别 30)中,任何应用都可以在手机处于锁定状态时使用 Notification.Builder.setFullScreenIntent 发送全屏 intent。在 AndroidManifest 中声明 USE_FULL_SCREEN_INTENT 权限即可; 全屏 int…...
如何在 Vue 和 JavaScript 中截取视频任意帧图片
大家好!今天我们来聊聊如何在 Vue 和 JavaScript 中截取视频的任意一帧图片。这个功能在很多场景下都非常有用,比如视频编辑、视频预览等。本文将带你一步步实现这个功能,并且会提供详细的代码示例。 准备工作 首先,我们需要一个…...
代码随想录学习 day54 图论 Bellman_ford 队列优化算法(又名SPFA) 学习
Bellman_ford 队列优化算法(又名SPFA) 卡码网:94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从…...
递归遍历树结构,前端传入一整颗树,后端处理这个树,包括生成树的id和pid等信息,
递归逻辑 递归遍历树结构,将树结构转换list集合 并添加到 flowStepTree 集合 // 递归遍历树结构,将树结构转换list集合 并添加到 flowStepTree 集合private static void settingTree(ProductFlowStepVO node, Long parentId, String ancestors, List<…...
Nginx详解(超级详细)
目录 Nginx简介 1. 为什么使用Nginx 2. 安装Nginx Nginx的核心功能 1. Nginx反向代理功能 2. Nginx的负载均衡 3 Nginx动静分离 Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协…...
postman使用旧版本报错version mismatch detected
卸载 postman又重装了别的版本,打开后遇到了这个报错,解决办法如下: 删除缓存文件 C:\Users\Administrator\AppData\Roaming\Postman 下载PostMan 提取码:6k51...
探索数据的隐藏维度:使用Scikit-Learn进行特征交互性预测
探索数据的隐藏维度:使用Scikit-Learn进行特征交互性预测 在机器学习中,特征交互性是指不同特征之间可能存在的复杂关系,这些关系对预测结果有着重要影响。Scikit-Learn(简称sklearn),作为Python中广受欢迎…...