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

C语言深度剖析(部分)--剩下随缘更新

C语言深度剖析

关键字auto-最宽容大度的关键字

变量的分类

代码块:用{ }括起来的区域

局部变量:包含在代码块中的变量,局部变量具有临时性,进入代码块,自动形成局部变量,退出代码块自动释放。

全局变量:在所有函数外定义的变量。全局变量具有全局性。

作用域概念:指的是该变量可以被正常访问的代码区域

#include <stdio.h>
int main()
{int x=10;if(x==10){y=20;printf("%d %d",x,y);//x,y均可打印}printf("%d %d",x,y);//y会报错return 0;
}

局部变量:只在本代码块内有效

全局变量:整个程序运行期间都有效

生命周期

概念:变量从定义到被释放的时间范围,所谓的释放,是指曾经开辟的空间“被释放”

局部变量:进入代码块,形成局部变量(开辟空间),退出代码块,“释放”全局变量

全局变量:定义完成之后,程序运行的整个生命周期内,该变量一直有效

作用域VS生命周期

打个比方来说,有一位大富豪,从他出生到死亡所做的贡献,从时间的维度上来理解,我们可以说是生命周期,他所影响的范围可以叫做作用域,作用域更偏向于空间的维度来说

再来举个例子:

#include <stdio.h>
int g_val=20;
int main()
{int g_val=100;printf("%d",g_val);return 0;
}

当局部变量和全局变量命名起冲突的时候,编译器会优先考虑局部变量,所以打印结果为100

可以理解为就近原则

总结

作用域:该变量的有效范围

生命周期:时间的概念,什么时候被开辟,什么时候被释放
在这里插入图片描述

auto相关

如何使用:一般代码块中定义的变量,即局部变量,都是auto关键词修饰的,不过一般都是省略的

默认所有的变量都是auto修饰的吗?

不是,一般用来修饰局部变量

局部变量,临时变量,自动变量统称为局部变量

auto关键字已经很老,永不使用,在C语言中,但是C++和这个不一样

关键字 register-最快的关键字

铺垫知识:

在这里插入图片描述

寄存器的本质

在硬件层面上,提高计算机的运算效率。因为不需要从内存中读取数据啦。

register修饰变量

尽量将所修饰的变量放到CPU寄存区中,从而达到提高效率的目的

那么什么样的变量可以用register

1.局部的(全局会导致CPU寄存器长时间被占用)

2.不会被写入的(写入就需要写回内存,后续还需要读取检测,那么register的意义何在?)

3.是高频被读取的(提高效率)

4.如果要使用,不是大量使用(寄存器数量有限)

#include <stdio.h>
int main()
{register int a=10;printf("%d\n",a);return 0;
}

结果可以被正常打印,但是既然是存放在寄存器中,也就不是存储在内存中,所以不可以使用取地址符号&

关键字static-最名不副实的关键字

对extern声明的小小补充

当我要对一个函数进行声明的时候可不可以像如下情况:

extern int v_gal=100;

对这个变量进行了赋值,这是不可以的,因为声明并没有开辟空间,=100这是开辟空间或者初始化

所以我们得出结论

所有的变量声明的时候不能设置初始值

再来将讲一点:

我们这里是main.c这个源文件去调用test.c里的show()函数,倘若还有test1.c,test2.c,test3.c要去调用这个show()函数呢,所以:

单纯地使用源文件,组织项目结构的时候,项目越大越复杂的时候,维护成本会变得越来越高

这样也就诞生了头文件 .h

.h:头文件,组织项目结构的时候,减少大型项目的维护成本

接下来是对维护成本的解释:
还是拿刚刚的例子来举例,如果说我们要把上面的v_gal改成v_gal2,那么我们是不是要把所有的源文件声明的位置进行改动,如果说漏掉一个,,都会导致程序运行错误,这里还好只有四个源文件,但是如果是四十个,或者四百个呢,你试想一下。

综上,我们都在回答一个问题:为什么要有头文件

有关头文件的补充说明:

.h基本上都是要被多个源文件包含的,可能有一个问题,头文件被重复包含的问题,会导致运行效率降低

解决方案

在头文件开头写上#pragma once(**PS:**在VS2022中会默认加上#pragma once)
在这里插入图片描述

头文件包含以下内容:

  • C头文件

  • 所有的变量的声明

  • 所有的函数的声明

  • #define ,类型typedef, struct

在C语言中,包含头文件的两种形式

#include <stdio.h>这种是C语言库里面要包含的头文件

#include"test.h"是包含自定义的头文件

这个地方我们要特别注意的是函数的声明,因为在链接的过程中,test.c和main.c会进行匹配看是否有show()函数,即使说你已经定义了该函数,但是你没有声明的时候,编译器会忽视,所以要进行声明

书写如下:
在这里插入图片描述

不向里面添加函数体,道理和声明变量一个道理

注意

变量声明必须带上extern!!!

虽然在实际应用的时候编译器不会报错,但是你会无法区分是开辟空间还是声明变量

函数声明建议带上extern,为什么是建议呢。因为区别在于有没有函数体,编译器在识别的时候如果没有看到函数体会默认是函数的声明

几个小问题:

1.全局变量可以跨文件访问吗?可以

2.函数可以跨文件访问吗?可以

在具体的应用场景中,有没有可能我们不想让全局变量或者函数跨文件访问,指向本文件内部被访问

请出我们真正的主角-------static

在这里插入图片描述

看上面这幅图片,LNK表示的是链接的意思,这里是链接错误

static int g_val =100;//全局变量

访问吗?可以

在具体的应用场景中,有没有可能我们不想让全局变量或者函数跨文件访问,指向本文件内部被访问

请出我们真正的主角-------static

[外链图片转存中…(img-pPVbonaX-1723038243763)]

看上面这幅图片,LNK表示的是链接的意思,这里是链接错误

static int g_val =100;//全局变量

结论1:static修饰全局变量,该变量只能在本文件内被访问,不能被外部其他文件直接访问(可以被间接访问,如被函数调用)

相关文章:

C语言深度剖析(部分)--剩下随缘更新

C语言深度剖析 关键字auto-最宽容大度的关键字 变量的分类 代码块&#xff1a;用{ }括起来的区域 局部变量&#xff1a;包含在代码块中的变量&#xff0c;局部变量具有临时性&#xff0c;进入代码块&#xff0c;自动形成局部变量&#xff0c;退出代码块自动释放。 全局变量…...

计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

Linux 下查看 CPU 使用率

目录 一、什么是 CPU 使用率二、查看 CPU 利用率1、使用 top 查看2、用 pidstat 查看3、用 ps 查看4、用 htop 查看5、用 nmon 查看6、用 atop 查看7、用 glances 查看8、用 vmstat 查看9、用 sar 查看10、dstat11、iostat 三、总结 CPU 使用率是最直观和最常用的系统性能指标&…...

数理基础知识

数理基础 大数定律期望方差常见分布伯努利分布泊松分布高斯分布服从一维高斯分布的随机变量KL散度服从多元高斯分布的随机变量KL散度 Gibbs不等式凸函数Jensen不等式 似然函数泰勒近似信息论信息量信息熵KL散度JS散度交叉熵 Wiener ProcessSDE 大数定律 期望方差 x为连续随机…...

Java解决lombok和mapstruct编译模块的问题

pom.xml <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!-- 1.18.16版本 --><version>${lombok.version}</version><scope>provided</scope><!-- 防…...

大模型场景应用全集:持续更新中

一、应用场景 1.办公场景 智能办公&#xff1a;文案生成&#xff08;协助构建大纲优化表达内容生成&#xff09;、PPT美化&#xff08;自动排版演讲备注生成PPT&#xff09;、数据分析&#xff08;生成公式数据处理表格生成&#xff09;。 智能会议&#xff1a;会议策划&…...

理解RabbitMQ中的消息存储机制:非持久化、持久化与惰性队列(Lazy Queue)

文章目录 1. 非持久化消息&#xff08;Transient Messages&#xff09;内存压力处理 2. 持久化消息&#xff08;Persistent Messages&#xff09;3. 惰性队列&#xff08;Lazy Queue&#xff09;官方推荐 总结 在RabbitMQ中&#xff0c;消息的存储和处理方式可以根据不同的需求…...

【机器学习】BP神经网络正向计算

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 BP神经网络正向计算1. 引言2. BP神经网络结构回顾3. 正向计算的基本原理4. 数学…...

谷粒商城实战笔记-108~109-elasticsearch删除与批量导入

一&#xff0c;108-全文检索-ElasticSearch-入门-put&post修改数据 第一种更新方式&#xff1a; POST customer/external/1/_update {"doc":{"name": "John Doew"} }第二种更新方式&#xff1a; POST customer/external/1 { "name&q…...

RabbitMQ:发送者的可靠性之使用消息确认回调

文章目录 配置RabbitMQ的ConfirmCallback使用ConfirmCallback发送消息实际使用中的注意事项总结 在开发消息驱动的系统时&#xff0c;消息的可靠传递至关重要。而RabbitMQ作为一个广泛使用的消息队列中间件&#xff0c;提供了多种消息确认机制&#xff0c;确保消息从生产者到交…...

HCIP学习 | OSPF---LSA限制、不规则区域、附录E、选路

目录 Days06&#xff08;24.8.8&#xff09;OSPF---LSA限制、不规则区域、附录E、选路 特殊区域 stub 区域&#xff0c; 末节区域 Totally stub &#xff1a;完全的末节区域 NSSA区域&#xff1a;(not so stub area) 非完全末节区域 完全的非完全的末节区域&#xff1a; …...

CVE-2017-15715~Apache解析漏洞【春秋云境靶场渗透】

Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件&#xff1a; AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type &#xff0c;值为 text/html &#xff1b;给 …...

thinkphp 5.0.24生成模块

访问的形式生成模块&#xff1a; 1、需要在入口文件Public/index.php中加入以下代码&#xff1a; //生成Home模块&#xff0c;添加以下这句后&#xff0c;打开浏览器执行&#xff1a;http://www3.phptp5.com/public/index.php自动生成Home模块 \think\Build::module(Home); …...

值得注意!家里有带毛发动物就有浮毛?宠物空气净化器一键净化

上次跟朋友逛完街去她家&#xff0c;她家热情的哈基米开门就一个猛冲&#xff0c;我朋友接住就是一顿猛亲&#xff0c;亲猫一时爽&#xff0c;汗液粘着猫毛&#xff0c;粘得满手臂、满脸都是&#xff0c;看得鼻炎星人头皮发麻...好多养宠物的都说&#xff0c;梳毛根本不管用&am…...

Linux 代理(proxy)设置

有关网络代理的环境变量 环境变量说明可选的取值http_proxyhttp协议的网络连接使用该代理。ip:porthttp://ip:portsocks://ip:portsocks4://ip:portsocks5://ip:porthttps_proxyhttps协议的网络连接使用该代理。ftp_proxyftp协议使用该代理。all_proxy所有网络协议的网络连接都…...

操作系统真相还原:获取文件属性

14.15 获得文件属性 14.15.1 ls命令的幕后功臣 ls 命令中调用了大量的系统调用 stat64 和write &#xff0c;其中stat64 用于获得文件的属性信息&#xff0c; write 用于把信息输出到屏幕&#xff0c;即标准输出。这里的 stat64 表示 64 位版本的 stat。 其函数原型是int sta…...

聚鼎装饰画:投资一家装饰画店铺要花费多少钱

在艺术的殿堂里&#xff0c;每一幅装饰画都是静默的诗篇&#xff0c;而开设一家装饰画店铺&#xff0c;便是将这份静谧与美好呈现给世界的开始。然而&#xff0c;背后的投资成本&#xff0c;却是一笔需要精打细算的账。 店铺的选址&#xff0c;犹如画家挑选画布&#xff0c;至关…...

编程的魅力、其重要性、学习方法以及未来趋势

在数字化时代&#xff0c;编程已不仅仅是程序员的专属技能&#xff0c;它逐渐渗透到我们生活的方方面面&#xff0c;成为连接现实与虚拟世界的桥梁。从日常使用的智能手机应用到探索宇宙奥秘的超级计算机&#xff0c;编程的力量无处不在。本文将深入探讨编程的魅力、其重要性、…...

ubuntu init set

1 cuda驱动 cuda use not open test 自己下载安装 以上操作后可能是核显卡&#xff0c;需要执行下列进入独立显卡&#xff0c;才能进行HDMI链接 sudo prime-select nvidia sudo prime-select intel prime-select query 该命令用于查看目前的显卡使用模式&#xff0c;可以看到…...

MySQL数据分析进阶(八)存储过程

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…...

【实战】Ubuntu 22.04LTS下Nvidia驱动安装与GCC版本冲突解决指南

1. 为什么你的Nvidia驱动安装总失败&#xff1f; 每次在Ubuntu上装Nvidia驱动就像在玩俄罗斯轮盘赌——有时候一次成功&#xff0c;有时候要反复折腾好几遍。特别是Ubuntu 22.04LTS这个长期支持版本&#xff0c;表面看着稳定&#xff0c;实际暗藏杀机。最常见的问题就是那个让人…...

高效工作方法论:六大核心SOP详解

我们首先来看第一个SOP&#xff1a;如何正确地接收任务。这不仅仅是简单地说一句“收到”&#xff0c;而是一个从接收到最终交付的完整闭环管理过程。 第一步是“精准接收”&#xff0c;重点在于明确目标和标准&#xff0c;确认时限和资源&#xff0c;拒绝模糊指令。 第二步是…...

解密微信小程序逆向工程:3种核心方法深度解析wxappUnpacker

解密微信小程序逆向工程&#xff1a;3种核心方法深度解析wxappUnpacker 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向工程工具wxappUnpacker为开发者提供了一套完整的源码还原解决方案&#xff0c;能…...

开箱即用!AI股票分析师快速部署指南:基于Ollama框架的完全私有化体验

开箱即用&#xff01;AI股票分析师快速部署指南&#xff1a;基于Ollama框架的完全私有化体验 1. 引言&#xff1a;为什么需要私有化AI股票分析工具 在金融投资领域&#xff0c;及时准确的股票分析是决策的关键。然而&#xff0c;传统分析工具存在几个痛点&#xff1a;一是依赖…...

如何突破信息壁垒?Bypass Paywalls Clean的全方位应用指南

如何突破信息壁垒&#xff1f;Bypass Paywalls Clean的全方位应用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的时代&#xff0c;优质内容往往被付费墙层层阻隔。B…...

OpenClaw硬件加速:在NVIDIA显卡上优化Kimi-VL-A3B-Thinking推理速度

OpenClaw硬件加速&#xff1a;在NVIDIA显卡上优化Kimi-VL-A3B-Thinking推理速度 1. 从CPU到GPU的性能跃迁之旅 去年冬天&#xff0c;当我第一次在本地部署Kimi-VL-A3B-Thinking模型时&#xff0c;那个漫长的等待过程至今记忆犹新。一个简单的图文问答任务&#xff0c;在16核C…...

OpenClaw+Qwen2.5-VL-7B学术助手:论文图表解析与摘要生成

OpenClawQwen2.5-VL-7B学术助手&#xff1a;论文图表解析与摘要生成 1. 为什么需要AI学术助手 作为一名经常需要阅读大量文献的研究人员&#xff0c;我长期被三个问题困扰&#xff1a;首先是PDF论文中的图表数据提取困难&#xff0c;手动转录既耗时又容易出错&#xff1b;其次…...

从零解析SHA-1:一个160位哈希的诞生之旅

1. 从原材料到成品&#xff1a;SHA-1的工厂流水线 想象你是一家精密零件加工厂的厂长&#xff0c;每天要处理各种形状不规则的金属原料&#xff08;原始数据&#xff09;&#xff0c;最终需要生产出标准化的160位产品&#xff08;哈希值&#xff09;。SHA-1算法就像这条全自动生…...

Qwen3-Reranker完整指南:支持Markdown/HTML文档解析的增强版方案

Qwen3-Reranker完整指南&#xff1a;支持Markdown/HTML文档解析的增强版方案 1. 引言&#xff1a;重新定义文档检索的精准度 在日常工作中&#xff0c;你是否遇到过这样的困扰&#xff1a;用关键词搜索文档时&#xff0c;系统返回的结果看似相关&#xff0c;实际上却偏离了你…...

避坑指南:Node-RED读取西门子PLC模拟量值,为什么你的DB块数据总是0?(附S7-1200配置全流程)

Node-RED与西门子S7-1200 PLC通信避坑实战&#xff1a;从DB块数据异常到稳定读取的完整解决方案 当工业物联网项目遇到Node-RED与西门子PLC通信时&#xff0c;DB块数据读取为0的问题就像一道无形的墙&#xff0c;让不少开发者陷入调试泥潭。上周深夜&#xff0c;我的工作站屏幕…...