当前位置: 首页 > news >正文

【Linux】环境变量(图文)

目录

一、main函数的参数解释:

1、argc和argc的解释

2、为什么要这样设置?

3、注意:

4、命令行计算器:

二、认识环境变量

三、见见环境变量

1、执行一个程序的前提

2、指令:echo $PATH

3、为什么系统自带的指令运行时不用加 " ./ "

4、环境变量:PWD

5、环境变量:USER

6、查看所有环境变量:env

7、创建新的环境变量的指令:export

8、总结:

9、main函数的第三个参数

10、bash维护的环境变量表

11、不使用命令行参数传参,如何获取环境变量?

12、获取环境变量的第三种方法:environ

四、本地变量

1、set+回车,可以查看系统中所有变量,包括环境变量和本地变量

2、移除环境变量 / 本地变量指令:unset

五、问题:bash进程只有用户登录系统后才存在,而所有环境变量都在bash进程的上下文中,但当我们关闭连接后又重启时,这些环境变量会恢复到默认值,那这些环境变量是从哪里来的呐?


前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家

点击跳转到网站

一、main函数的参数解释:

1、argc和argc的解释

平时我们写C语言时,main函数一般都是不带参数的,但其实main也有参数,先来介绍前两个参数:

  

main函数的参数其实就是命令行的参数:

(1)第一个参数argc是第二个参数argv数组的大小;

(2)第二个参数argv是用来保存命令行输入的参数的;

通过下述代码测试:

  1 #include<stdio.h>2 int main(int argc,char* argv[])3 {4     for(int i = 0;i < argc;i++)5     {6         printf("argv[%d]:%s\n",i,argv[i]);7     }8     9     return 0;10 }                    

当我们运行该可执行文件时,后面如果带有参数,则后面这些参数就会被argv数组接收保存,这个操作是bash做的:

这些命令行提示符都是bash给我们输出的:

bash还会将我们输入"./myprocess a b c ",以空格为分隔符,将每一段当做字符串存在argv数组中,同时以NULL结尾,所以我们还可以这样打印:

  1 #include<stdio.h>2 int main(int argc,char* argv[])3 {4     for(int i = 0;argv[i];i++)5     {6         printf("argv[%d]:%s\n",i,argv[i]);7     }8 9     return 0;10 }
~        

因为argv是以NULL结尾,所以当for循环遇到NULL就会自动结束。

2、为什么要这样设置?

场景之一就是可以使一个程序通过命令行传入不同参数从而实现不同功能:

  1 #include<stdio.h>2 #include<string.h>3 int main(int argc,char* argv[])4 {5     if(argc > 2)6     {7         printf("输入了多个参数,输入无效\n");8         return 0;9     10     }11     if(strcmp("-1",argv[1])==0)12     {   13         printf("执行-1功能\n");14     }15     else if(strcmp("-2",argv[1]) == 0)16     {   17         printf("执行-2功能\n");18     }24     return 0;25 }

3、注意:

我们平时使用的指令(如ls,pwd),都带有选项(如ls -a),而大部分指令都是C/C++写的,就是通过main的参数达到的不同选项实现不同功能,这些选项也是命令行参数

命令行参数就是linux指令选项的基础!

4、命令行计算器:

通过main参数的功能,可以实现一个简易版命令行计算器:

二、认识环境变量

(1)环境变量不只有一个,而是有很多,而且环境变量彼此之前没有关系。

(2)环境变量一般是系统内置的具有特殊用途的变量。

(3)定义变量的本质其实就是开辟空间,在运行期间我们的程序也能开辟空间。

(4)操作系统(bash)使用C语言写的程序,它能在运行中开辟空间。系统的环境变量本质就是系统自己开辟的空间,只是用环境变量给这份空间命名和内容。

三、见见环境变量

1、执行一个程序的前提

执行一个程序的前提是要在系统里面找到这个程序,所以平时我们运行程序时需要在可执行程序名前面加" ./ ",不然系统会提示找不到

但是我们使用shell自带的指令就不需要带./,如ls、pwd等等。

2、指令:echo $PATH

 该指令是用来查看系统默认去搜索的各个路径:

注意" : "是路径之间的分割符。

3、为什么系统自带的指令运行时不用加 " ./ "

我们自己写的程序想要像系统指令那样不用加" ./ ",有两种方法:

(1)可以将自己的可执行文件拷贝到指令echo $PATH所展示的任意一个路径下。但是这种方法会污染系统的路径,所以建议使用第二种方法。

(2)将自己的可执行程序的路径放到PATH中,指令格式如下图:

注意要将红框中的" :$PATH "带上,因为这个指令会直接覆盖原PATH内容,而$PATH代表的就是原有PATH内容,所以需要加上。

此时运行我们自己的程序也不需要加" ./ "了:

若不小心将原有PATH内容覆盖了:

此时系统自带的指令就都不可以使用了,此时只需要要重启shell,即可恢复原有PATH内容。

4、环境变量:PWD

系统pwd指令怎么知道当前我在哪个路径?

就是因为添加了PWD环境变量,这个环境变量会记录我的当前路径。

可以通过下面指令查看:

5、环境变量:USER

该环境变量记录的是当前登录的用户:

6、查看所有环境变量:env

7、创建新的环境变量的指令:export

8、总结:

环境变量就是当你进入系统时,存储和传递系统配置信息、控制程序运行环境等重要数据的,方便你之后去访问。

9、main函数的第三个参数

讲到环境变量就可以谈谈main函数的第三个参数:char* env[ ]

env数组和argv数组都是用来存储数据的,只是env存储的是环境变量

10、bash维护的环境变量表

在系统看来其实这些环境变量就是一行一行字符串:

bash内部有个env表(与main函数的第三个参数类似),每个元素就是用来存储每一行环境变量的首地址,通过这个表来维护环境变量。并且环境变量是具有全局属性,可以被子进程继承下去。

所以我们知道bash会维护两张表,一张是命令行参数的argv表,一张是env表,这样我们才能给main函数传参。

11、不使用命令行参数传参,如何获取环境变量?

通过一个系统调用:

char *getenv(const char *name);

参数传的是环境变量名,函数返回环境变量的内容。

示例代码:

  1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 #include<unistd.h>5 int main(int argc,char* argv[])6 {7 8     const char* username = getenv("USER");9     if(username)printf("%s\n",username);10     else printf("None\n");11 12     return 0;13 }  

通过这个系统调用,我们就可以通过获取环境变量进行筛选,比如该程序只能被限定用户使用,这样限定后,即使是root用户也不能执行该程序:

 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 #include<unistd.h>5 int main(int argc,char* argv[])6 {7 8     const char* username = getenv("USER");9     if(username != "HF")printf("你的用户名为:%s,你没有权限访问这个程序\n",username);10     else printf("你可以执行\n");11 12     return 0;13 }

12、获取环境变量的第三种方法:environ

environ类型是" char** ",这是内部定义的一个全局变量,我们知道char二级指针可以看成一个char指针数组,所以environ其实跟env表差不多,每一行都是环境变量的首地址:

使用environ获取环境变量的示例代码:

  1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 #include<unistd.h>5 int main(int argc,char* argv[])6 {7 8     //通过environ获取环境变量9     extern char** environ;10     for(int i = 0;environ[i];i++)11     {12         printf("%s\n",environ[i]);13     }14 15 16     return 0;
}

因为是env表以NULL结尾,所以for循环的循环条件可以像上述这样写。

四、本地变量

除了环境变量,其实还是本地变量,定义本地变量的方法直接像下述那样在命令行写,也是通过echo $xxx查看:

1、set+回车,可以查看系统中所有变量,包括环境变量和本地变量

2、移除环境变量 / 本地变量指令:unset

五、问题:bash进程只有用户登录系统后才存在,而所有环境变量都在bash进程的上下文中,但当我们关闭连接后又重启时,这些环境变量会恢复到默认值,那这些环境变量是从哪里来的呐?

答案:这些环境变量是从磁盘的某些脚本文件或者配置文件来的。

六、关于环境变量的相关代码

该小点内容来自豆包AI:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>// 使用 getenv 函数获取环境变量的值
void get_env_value(const char *name) {char *value = getenv(name);if (value != NULL) {printf("The value of %s environment variable is: %s\n", name, value);} else {printf("The %s environment variable is not set.\n", name);}
}// 使用 environ 全局变量访问所有环境变量
void list_all_environment_variables() {char **env = environ;while (*env != NULL) {printf("%s\n", *env);env++;}
}// 使用 putenv 函数设置环境变量
void set_env_with_putenv(const char *name, const char *value) {char new_env[100];snprintf(new_env, sizeof(new_env), "%s=%s", name, value);if (putenv((char *)new_env) == 0) {get_env_value(name);} else {printf("Failed to set the environment variable using putenv.\n");}
}// 使用 setenv 函数设置环境变量
void set_env_with_setenv(const char *name, const char *value) {if (setenv(name, value, 1) == 0) {get_env_value(name);} else {printf("Failed to set the environment variable using setenv.\n");}
}// 使用 unsetenv 函数删除环境变量
void delete_env(const char *name) {get_env_value(name);if (unsetenv(name) == 0) {get_env_value(name);} else {printf("Failed to delete the environment variable.\n");}
}// 子进程中环境变量的继承
void child_process_inherit_env(const char *name, const char *value) {if (setenv(name, value, 1) == 0) {pid_t pid = fork();if (pid == 0) {// 子进程char *value_in_child = getenv(name);if (value_in_child != NULL) {printf("The value of %s in child process is: %s\n", name, value_in_child);}_exit(0);} else if (pid > 0) {// 父进程wait(NULL);} else {perror("fork");}}
}int main() {// 获取 PATH 环境变量的值get_env_value("PATH");// 列出所有环境变量printf("All environment variables:\n");list_all_environment_variables();// 使用 putenv 设置环境变量set_env_with_putenv("MY_VARIABLE", "hello");// 使用 setenv 设置环境变量set_env_with_setenv("ANOTHER_VARIABLE", "world");// 删除环境变量delete_env("MY_VARIABLE");// 子进程中环境变量的继承child_process_inherit_env("INHERITED_VARIABLE", "from_parent");return 0;
}

相关文章:

【Linux】环境变量(图文)

目录 一、main函数的参数解释&#xff1a; 1、argc和argc的解释 2、为什么要这样设置&#xff1f; 3、注意&#xff1a; 4、命令行计算器&#xff1a; 二、认识环境变量 三、见见环境变量 1、执行一个程序的前提 2、指令&#xff1a;echo $PATH 3、为什么系统自带的指令…...

基于OpenCV的人脸识别:EigenFaces算法

文章目录 引言一、概述二、代码解析1. 准备工作2. 加载训练图像3. 设置标签4. 准备测试图像5. 创建和训练识别器6. 进行预测7. 显示结果 三、代码要点总结 引言 人脸识别是计算机视觉领域的一个重要应用&#xff0c;今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFac…...

跟我学C++中级篇——STL容器的查找对比

一、C标准库的查找 在C的STL中&#xff0c;对容器或相关序列的查找中&#xff0c;有两种方式&#xff0c;一种是std::find&#xff0c;另外一种是std::search。而且在它们的基础上&#xff0c;还衍生出std::find_if、std::find_if_not、std::find_end等和std::search_n、range…...

解构C++高级命名空间:构建空间作用域·控制兼容

前引&#xff1a;C作为C语言的继承者&#xff0c;也是其掘墓人。在编程语言的演化长河中&#xff0c;C始终游走在【兼容】与【革新】的路上。C程序员眼中&#xff08;高效直接&#xff09;的全局函数&#xff0c;对于C开发者来说是【命名空间污染的炸弹】&#xff0c;如果C未发…...

怎么判断是不是公网IP?如何查看自己本地路由器是内网ip还是公网?

在网络世界中&#xff0c;IP 地址如同每台设备的 “门牌号”&#xff0c;起着至关重要的标识作用。而 IP 地址又分为公网 IP 和私网 IP&#xff0c;准确判断一个 IP 属于哪一类&#xff0c;对于网络管理、网络应用开发以及理解网络架构等都有着重要意义。接下来&#xff0c;我们…...

微服务中 本地启动 springboot 无法找到nacos配置 启动报错

1. 此处的环境变量需要匹配nacos中yml配置文件名的后缀 对于粗心的小伙伴在切换【测试】【开发】环境的nacos使用时会因为这里导致项目总是无法启动成功...

android-ndk开发(11): 安装 repo 命令

1. 长话短说 mkdir ~/soft/bin curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod x repo~/.pathrc 添加: export PATH$PATH:~/soft/bin2. 短话长说 repo 的官方介绍页面&#xff1a; https://gerrit.googlesource.com/git-repo/ repo 的官方下载地…...

【设计模式】GoF设计模式之策略模式(Strategy Pattern)

设计模式之策略模式 Strategy Pattern V1.0核心概念角色代码示例程序运行结果代码讲解 适用范围 V1.0 核心概念 策略模式是一种行为型设计模式&#xff0c;其核心思想是业务类执行某个动作时&#xff0c;可以使用该动作的不同的实现&#xff0c;并在程序运行中可以切换使用该…...

QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。

&#xff08;112&#xff09; &#xff08;113&#xff09;模仿随书老师给的源代码搭建的&#xff0c; LCD 显示的部分不一样 &#xff1a; &#xff08;114&#xff09;以下开始代码完善&#xff1a; 关联定时器的信号与槽函数 &#xff1a; &#xff08;115&#xff09;…...

用Python监控金价并实现自动提醒!附完整源码

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】&#x1f4bb;香港大宽带-4H4G 20M只要36/月&#x1f449; 点此查看详情 在日常投资中&#xff0c;很多朋友喜欢在一些平台买点黄金&#xff0c;低买高卖赚点小差价。但黄金价格实时波动频繁&#xf…...

加密领域 AI Agent 的崛起:DeFAI 如何重塑金融

原文&#xff1a;https://polkadot.com/blog/defai-crypto-ai-agents-explained/ 编译&#xff1a;OneBlock 一些创新大肆宣扬&#xff0c;另一些则在后台默默酝酿&#xff0c;不断迭代&#xff0c;直到它们突然无处不在&#xff0c;去中心化的金融系统也不例外。DeFi 解锁了…...

电位器如何接入西门子PLC的模拟量输入

1.设计思考 我现在手上有一个三线10kΩ的滑动变阻器&#xff0c;想让其当作模拟量接入西门子PLC中&#xff0c;外部改变电阻&#xff0c;PLC程序中能看到对应的阻值或电压&#xff0c;这样可以练习模拟量输入这个知识点&#xff01; 2.了解模拟量的种类 模拟量一般有电压型和…...

发那科机器人5(异常事件和程序备份加载+ROBOGUIDE离线仿真)

发那科机器人5(异常事件和程序备份加载+ROBOGUIDE离线仿真) 一,异常事件和程序备份加载1,常见异常事件2,零点复归介绍3,程序备份-加载(未整理)二,`ROBOGUIDE`离线仿真1,仿真软件简介及安装步骤(未整理)2,机器人==导入与工具==与==工件添加==2.1,机器人导入(未整…...

第二章 如何安装KEIL5和新建工程

单芯片解决方案&#xff0c;开启全新体验——W55MH32 高性能以太网单片机 W55MH32是WIZnet重磅推出的高性能以太网单片机&#xff0c;它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身&#xff0c;具体来说&#xff0c;一颗W55MH32内置高性能Arm Cortex-M3核心…...

【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决

在Vivado中在always块中写逻辑时如果出现always块中的异步复位敏感词在块内部未使用的情况&#xff0c;如下例的rst&#xff1a; always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…...

跨浏览器自动化测试的智能生成方法

一、背景与挑战&#xff1a;跨浏览器测试为什么“难”&#xff1f; 在现代Web应用开发中&#xff0c;跨浏览器兼容性是用户体验的底线保障。面对Chrome、Firefox、Safari、Edge乃至IE、移动浏览器等多种运行环境&#xff0c;开发者与测试人员常面临&#xff1a; 相同DOM在不同…...

docker操作镜像-以mysql为例

Docker安装使用-CSDN博客 docker操作镜像-以mysql为例 当安装一个新的镜像时可以登录https://hub.docker.com/直接搜索想要安装的镜像&#xff0c;查看文档 1&#xff09;拉取镜像 docker pull mysql 或者 docker pull mysql:版本号 然后直接跳到第4&#xff09;步即可 2…...

【Yolo精读+实践+魔改系列】Yolov3论文超详细精讲(翻译+笔记)

前言 前面咱们已经把 YOLOv1 和 YOLOv2 的老底都给掀了&#xff0c;今天轮到 YOLOv3 登场&#xff0c;这可是 Joseph Redmon 的“封神之作”。讲真&#xff0c;这哥们本来是搞学术的&#xff0c;结果研究的模型被某些军方拿去“整点活”——不是做人是做武器的那种活。于是他一…...

【Python从入门到精通】--‘@‘符号的作用

在Python中&#xff0c;符号主要有三种用途&#xff1a;装饰器&#xff08;Decorator&#xff09;、矩阵乘法运算符&#xff08;Python 3.5&#xff09;以及类型提示中的修饰符&#xff08;如typing&#xff09;。 目录 1.--装饰器&#xff08;Decorator&#xff09; 2.--矩…...

git命令积累(个人学习)

如何将docx文件不上传&#xff1f; 创建或编辑 .gitignore 文件 打开 .gitignore 文件&#xff0c;添加以下内容来忽略所有 .docx 文件&#xff1a; *.docx清除已追踪的 .docx 文件 git rm --cached "*.docx"这将从 Git 仓库中删除 .docx 文件&#xff0c;但不会删…...

【人工智能核心技术全景解读】从机器学习到深度学习实战

目录 &#x1f30d; 前言&#x1f3db;️ 技术背景与价值&#x1f494; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…...

android-ndk开发(10): use of undeclared identifier ‘pthread_getname_np‘

1. 报错描述 使用 pthread 获取线程名字&#xff0c; 用到 pthread_getname_np 函数。 交叉编译到 Android NDK 时链接报错 test_pthread.cpp:19:5: error: use of undeclared identifier pthread_getname_np19 | pthread_getname_np(thread_id, thread_name, sizeof(thr…...

CAP理论:分布式系统的权衡

CAP理论&#xff1a;分布式系统的权衡 引言一、CAP理论的核心定义二、CAP的权衡逻辑&#xff1a;如何选择&#xff1f;三、CAP的常见误区与澄清四、CAP的实际应用场景与技术实现五、现代分布式系统对CAP的突破与演进六、CAP理论的设计建议总结 引言 在分布式系统的设计与实践中…...

【软件设计师:软件工程】11.项目管理

一、项目管理内容 项目管理是通过规划、组织、协调资源,在有限时间与预算内实现特定目标的过程,核心是平衡范围、时间、成本、质量四大要素,确保项目成功交付。 1.核心内容 项目启动目标定义:明确项目范围、交付成果及成功标准。可行性分析:评估技术、经济与风险可行性…...

遗传算法求解异构车队VRPTW问题

这里写目录标题 染色体编码设计&#xff1a;两种染色体编码方式一、客户排列 分割点&#xff08;Giant Tour Split&#xff09;1. 示例编码与解码2. 采用 客户排列 分割点 设计的特点3. 编码实现&#xff08;基于Python&#xff09; 二、使用整体聚类局部路由&#xff08;cl…...

区块链内容创作全攻略:海报、白皮书与视频的视觉化革命

区块链内容创作全攻略&#xff1a;海报、白皮书与视频的视觉化革命 ——2025年去中心化叙事的技术密码与商业实践 一、区块链海报设计&#xff1a;视觉叙事与用户心智占领 区块链海报需在3秒内抓住观众注意力&#xff0c;同时传递技术内核与商业价值。核心设计法则包括&#x…...

windows的rancherDesktop修改镜像源

您好&#xff01;要在Windows系统上的Rancher Desktop中修改Docker镜像源&#xff08;即设置registry mirror&#xff09;&#xff0c;您需要根据Rancher Desktop使用的容器运行时&#xff08;containerd或dockerd&#xff09;进行配置。用户提到“allowed-image”没有效果&…...

从零开始了解数据采集(二十四)——工业4.0讲解

在全球制造业加速变革的今天&#xff0c;“工业4.0”成为了一个炙手可热的词汇。从德国的概念提出&#xff0c;到我国的积极实践&#xff0c;这场技术与产业的深度融合正推动制造业迈向智能化、数字化的新时代。对于企业而言&#xff0c;这是一次不可多得的机遇&#xff0c;更是…...

Java复习笔记-基础

Java复习笔记 一、什么是JDK、JRE、JVM二、Keyword-关键字三、variable-变量浮点数类型-float和double字符类型-char基本数据类型变量间运算规则基本数据类型与 String 的运算和 四、逻辑运算符五、流程控制语句关于if else 和 switchfor循环while循环do while循环 六、Array-数…...

用递归实现各种排列

为了满足字典序的输出&#xff0c;我采用了逐位递归的方法&#xff08;每一位的所能取到的最小值都大于前一位&#xff09; 1&#xff0c;指数型排列 #include<bits/stdc.h> using ll long long int; using namespace std; int a[10];void printp(int m) {for (int h …...

基于Stable Diffusion XL模型进行文本生成图像的训练

基于Stable Diffusion XL模型进行文本生成图像的训练 flyfish export MODEL_NAME"stabilityai/stable-diffusion-xl-base-1.0" export VAE_NAME"madebyollin/sdxl-vae-fp16-fix" export DATASET_NAME"lambdalabs/naruto-blip-captions"acceler…...

SHA系列算法

SHA1系列算法 SHA&#xff08;Secure Hash Algorithm&#xff0c;安全散列算法&#xff09;是一组加密哈希算法&#xff0c;用于确保数据完整性和提供消息摘要功能。SHA算法由美国国家安全局&#xff08;NSA&#xff09;设计&#xff0c;并由国家标准与技术研究院&#xff08;…...

985高校查重率“隐性阈值”:低于5%可能被重点审查!

你是不是也以为&#xff1a; “查重率越低越好&#xff0c;最好压到1%、0%&#xff0c;导师看了都感动哭&#x1f979;” 但是你不知道的是——在985/211等重点高校&#xff0c;查重率太低反而可能引起导师和学术办公室的“特别关注”&#xff01; 今天就来扒一扒这个查重圈“…...

基于vue3+QuillEditor的深度定制

需求: 项目需求一个深度定制的富文本编辑器,要求能够定制表格,能够从素材库插入图片,以及其他个性化操作。我这里就基于vue3+ QuillEditor深度定制的角度,解析一下QuillEditor富文本编辑器的功能扩展功能的需求。 一、扩展工具栏 根据需求,我们需要扩展工具栏,实现自…...

Redis 8.0正式发布,再次开源为哪般?

Redis 8.0 已经于 2025 年 5 月 1 日正式发布&#xff0c;除了一些新功能和性能改进之外&#xff0c;一个非常重要的改变就是新增了开源的 AGPLv3 协议支持&#xff0c;再次回归开源社区。 为什么说再次呢&#xff1f;这个需要从 2024 年 3 月份 Redis 7.4 说起&#xff0c;因为…...

静态BFD配置

AR2配置 int g0/0/0 ip add 10.10.10.2 quit bfd quit bfd 1 bind peer-ip 10.10.10.1 source-ip 10.10.10.2 auto commit AR1配置 int g0/0/0 ip add 10.10.10.1 int g0/0/1 ip add 10.10.11.1 quit bfd quit bfd 1 bind peer-ip 10.0.12.2 source-ip 10.0.12.1 auto co…...

[python] 函数1-函数基础

一 函数使用 1.1 基本用法 def 函数名() 函数体 函数返回值: 返回调用的结果 def myPyFirstFunc():print("hello python") myPyFirstFunc()1.2 函数参数 def 函数名(形参a,形参b) 函数体 def add(a,b):return a b print(add(1,2)) print(add(1,4)) 二 函…...

【并发编程】MySQL锁及单机锁实现

目录 一、MySQL锁机制 1.1 按锁粒度划分 1.2 按锁功能划分 1.3 InnoDB锁实现机制 (1)记录锁(Record Lock) (2) 间隙锁(Gap Lock) (3) 临键锁(Next-Key Lock) (4) 插入意向锁(Insert Intention Lock) 二、基于 JVM 本地锁实现,保证线程安全 2.1 线程不安全的分析 2.1…...

C++ | 常用语法笔记

判断数字还是字母 1.笨办法&#xff0c;使用直接判断办法 if(c > 0 && c < 9) cout << "c是数字" << endl; if(c > a && c < z) cout << "c是小写字母" << endl; if(c > A && c< Z) …...

浅谈 Shell 脚本编程中引号的妙用

在 Shell 脚本编程中&#xff0c;引号的使用是一项基础却至关重要的技能。无论是单引号、双引号还是不加引号&#xff0c;它们都会显著影响 Shell 对字符串、变量、特殊字符以及命令的解析方式。理解这些差异不仅能帮助开发者编写更健壮的脚本&#xff0c;还能避免因误解引发的…...

DeFi开发系统软件开发:技术架构与生态重构

DeFi开发系统软件开发&#xff1a;技术架构与生态重构 ——2025年去中心化金融开发的范式革新与实践指南 一、技术架构演进&#xff1a;从单一链到多链混合引擎 现代DeFi系统开发已从单一公链架构转向“跨链互操作混合模式”&#xff0c;结合中心化效率与去中心化安全双重优势…...

Spring AI 集成 DeepSeek V3 模型开发指南

Spring AI 集成 DeepSeek V3 模型开发指南 前言 在人工智能飞速发展的当下&#xff0c;大语言模型不断推陈出新&#xff0c;DeepSeek AI 推出的开源 DeepSeek V3 模型凭借其卓越的推理和问题解决能力备受瞩目。与此同时&#xff0c;Spring AI 作为一个强大的框架&#xff0c;…...

C++:扫雷游戏

一.扫雷游戏项目设计 1.文件结构设计 首先我们要先定义三个文件 ①test.c //文件中写游戏的测试逻辑 ②game.c //文件中写游戏中函数的实现等 ③game.h //文件中写游戏需要的数据类型和函数声明等 2.扫雷游戏的主体结构 使⽤控制台实现经典的扫雷游戏 •游戏可以通过菜单…...

【写作格式】写论文时常见格式问题

写作格式 1.图片总是乱跑&#xff0c;怎么固定图片2.一键更新引用3.交叉引用[1][2][3]怎么变为[1,2,3]4.目录灰色底纹怎么消除5.word保存为pdf提取标题为书签 1.图片总是乱跑&#xff0c;怎么固定图片 遇到的问题 解决方法 第一步&#xff1a;图片格式——>环绕文字——&g…...

Android平台FFmpeg视频解码全流程指南

本文将详细介绍在Android平台上使用FFmpeg进行高效视频解码的实现方案&#xff0c;采用面向对象的设计思想。 一、架构设计 1.1 整体架构 采用三层架构设计&#xff1a; • 应用层&#xff1a;提供用户接口和UI展示 • 业务逻辑层&#xff1a;管理解码流程和状态 • Native…...

C31-形参与实参的区别

一 形参与实参 实参:调用函数时传递的实际值,可以是变量、常量或表达式,如"add(3,a)"中的’3’与’a’形参:函数定义中声明的参数变量,用于接收实参的值,如"int add(intx,inty)"中的’x’与’y’ C语言默认通过值传递参数,形参与实参是独立的变量,仅数据…...

自学嵌入式 day 16-c语言-第10章 指针

14 指针函数 返回值是指针的函数。 &#xff08;1&#xff09;动态内存分配 ①使用方式&#xff1a; #include<stdlib.h> void *malloc(size_t size) ②返回连续的内存空间的首元素地址&#xff0c;内存空间未被初始化&#xff0c;申请的是堆区的空间。 ③内存空间申请…...

DataWorks快速入门

文章目录 一、DataWorks简介1、概念2、功能3、优势 二、DataWorks使用1、创建工作空间2、绑定计算资源3、数据开发 三、DataWorks节点类型1、MaxCompute SQL节点①创建非分区表并插入数据②创建分区表并插入数据③查询表数据 2、离线同步节点3、PYODPS 3节点①判断表是否存在②…...

AtCoder Beginner Contest 404 A-E 题解

还是ABC好打~比ARC好打多了&#xff08; 题解部分 A - Not Found 给定你一个长度最大25的字符串&#xff0c;任意输出一个未出现过的小写字母 签到题&#xff0c;map或者数组下标查询一下就好 #include<bits/stdc.h>using namespace std;#define int long long #def…...

WiFi出现感叹号上不了网怎么办 轻松恢复网络

在日常生活中&#xff0c;WiFi已成为不可或缺的一部分。然而&#xff0c;有时我们会遇到WiFi图标上出现了感叹号&#xff0c;无法上网。无论是办公、学习还是娱乐&#xff0c;这种情况都会严重影响体验。这种情况该怎么解决呢&#xff1f;本期驱动哥就给各位介绍几种简单的解决…...