C语言王国探险记之变量的前世今生

news2024/11/24 12:40:55

王国探险记系列

文章目录(2)


前言

一、变量是什么?

         二、变量如何定义?

注意:当你赋值小数的时候,编译器会自然认为你是一个double类型的,所以你在使用float类型的时候要在小数后面加个f,然后小数的类型才是float类型的。

三,变量的命名

变量的命名的基本要求:

 变量的命名的实例:

四,变量的创建

五,变量的验证

六,全局变量和局部变量

七,变量的作用域

1,作用域是什么:

2,全局变量和局部变量的作用域

  2.1,局部变量的作用域就是变量所在的局部范围。

下面是三个实例:代码,注释,和结果运行图可以证明

实例1:

实例2:

实例3:

   2.2,全局变量的作用域就是整个工程

3,全局变量还可以怎么使用

 八,变量的生命周期

1,生命周期是什么:

生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

2,局部变量的生命周期

   2.1局部变量进入作用域生命周期开始,出作用域生命周期结束。

 3,全局变量的生命周期

        3.1全局变量的生命周期是整个程序的生命周期。

全局变量的生命周期的总结:

总结


前言

C语言王国探险记,是我们学习C语言,从小白成长为大佬的的探险历程,我们在这章将探险变量这个知识关卡



一、变量是什么?

变量是描述变化的量,有一些值总是在发生变化

比如:年龄,体重,薪资等等,

c语言中将那些变的量用变量来表示。

二、变量如何定义?

type  name;            解释:一个数据类型后面跟着一个名称就组成了,变量的基本创建形式

实例如:

int  num;

char c;

注意:当你赋值小数的时候,编译器会自然认为你是一个double类型的,所以你在使用float类型的时候要在小数后面加个f,然后小数的类型才是float类型的。

三,变量的命名

变量的命名的基本要求:


 变量的命名的实例:

int 2*3;因为有*不是数字,字母,和下划线当中的所以不行

int 2b;因为开头不能是数字所以不行

int _2b;可以的因为开头可以是下画线

长度不能超过63个字符

int _2B;可以但是和上面的int _2b代表的是不一样的,所以是区分大小写的

C语言里面不能使用关键字

int char ;是不行的变量的名字不能是关键字

变量的名字尽量有意义一些不要胡起不要让被人看不懂你的变量的名字

四,变量的创建

我们使用代码加注释来解释创建的各个类型的变量

int main()
{
	int zhangsan = 20;//我想创建一个整型变量,
    //名字叫zhangsan这样就可以了,创建的时候我想给他赋一个20,在名字后面加一个=20就可以了
	int num = 0;//创建一个整数变量叫 num它的值是0;这样也可以
	char ch;//创建一个char类型的变量ch
	double d;//创建一个double 类型的变量叫d
	return 0;
}

五,变量的验证

我们使用代码加注释来解释创建的各个类型的变量

int main()
{
	//为什么叫变量呢,变量是在说明他的值可变
	int  a = 10;
	printf("a=%d\n", a);//我们来打印验证一下,说明a确实可变
	a = 100;
	printf("a=%d\n", a);//加个a=号表示的是在占位符前面加一个修饰,占位符会被后面的值替换掉
	return 0;
}

六,全局变量和局部变量

全局变量:在{}外边定义的变量就是全局变量,全局变量是都可以使用的,你想要达到什么样的状态就怎么样去使用就行

局部变量:就是{}内部定义的变量就是局部变量,在局部内可以使用

当一个局部变量和一个全局变量在一个地方都可以使用的时候就是,局部优先

具体实例直接在代码加注释,以及结果运行图了解

//全局变量:在{}外边定义的变量就是全局变量,全局变量的全都可以使用
//局部变量:就是{}内部定义的变量就是局部变量,在局部内可以使用
//当一个局部变量和一个全局变量在一个地方都可以使用的时候就是,局部优先
int a = 100;//当我们把变量放到大括号外面的时候被称为全局变量
int main()
{
	printf("全局变量a-->%d\n", a);
	int a = 10;//在括号里面的时候被称为局部变量
	{
		int b = 1000;
		printf("局部变量b-->%d\n", b);//局部变量b的使用
	}
	printf("局部优先a-->%d\n", a);//虽然有全局变量a=100,但是我们有着局部优先原则,所以a打印为10
}

七,变量的作用域

1,作用域是什么:

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。

解释:通俗来说就是这个变量在那里可以使用那里就是它的作用。

2,全局变量和局部变量的作用域

  2.1,局部变量的作用域就是变量所在的局部范围。

理解:我们说的这个局部范围是从它开始定义开始向后的局部范围,局部变量的范围就是它的作用域局部变量就好像你自己家的自行车,只能你们家里的人骑一样

下面是三个实例:代码,注释,和结果运行图可以证明

实例1:

int main()
{
	{
		int a = 10;//10之所以可以正常打印,
                  //就是因为在这个大括号里面创建的变量在这个大括号里面
                 //是可以在大括号里面使用是没有问题的
		printf("%d\n", a);
	}
}
//a变量只能在自己所在的大括号里面使用,大括号就是他的作用域,

 实例2:

int main()
{
	{
		int a = 10;//在大括号里面定义的a只能在在里面看到出了大括号就看不到了
	}
	printf("%d\n", a);//当我们把这个printf()放到外面,就会报错说是未定义的标识符a
}

实例3:

int main()
{
	int b = 100;//在它所在的范围内,定义的代码往后的都可以使用
	{
		int a = 10;
		printf("%d\n", b);
	}
	printf("%d\n", b);//这个b是定义在大括号内部的,你在任意位置都可以使用
	return 0;
}


   2.2,全局变量的作用域就是整个工程

理解:全局变量的作用域,是很广范的,就好像放在马路上的共享单车一样,谁都可以使用。

代码,注释,和结果运行图可以帮助理解:

int a = 100;//这是一个全局范围内的变量,在main()函数里可以使用,在自定义的函数里面也可以使用
void test()//我们单独在自定义的一个函数里面打印a,
{
	printf("test()--->%d\n", a);
}
int main()
{
	printf("main()-->%d\n", a);
	test();//调用这个test函数
	return 0;
}

 

3,全局变量还可以怎么使用

通过extern 的声明就可以使用其他文件的定义的变量
但是在一个项目的其他文件中不能定义多个a,因为存在多个就会造成重定义
全局变量的作用域是整个工程的,只要是合法的语法情况下都可以使用
更加说明了全局变量的作用域是非常广的
 

代码,注释,和结果运行图可以帮助理解:

因为我们的代码验证需要两个文件里的代码使用我们将代码分为两段,并配上两段代码的文件截图

// 通过extern 的声明就可以使用其他文件的定义的变量
// 但是在一个项目的其他文件中不能定义多个a,因为存在多个就会造成重定义
//全局变量的作用域是整个工程的,只要是合法的语法情况下都可以使用
//更加说明了全局变量的作用域是非常广的



extern int a;//extern是用来声明外部符号
//声明来自其他文件的一些符号
//声明一下我有一个变量a,它的类型是整型,它来自外部
void test()
{
	printf("test()--->%d\n", a);
}
int main()
{
	printf("%d\n", a);
	test();
	return 0;
}
int a = 10;
//我们在add.c里面创建一个全局变量,我们能不能在test.c里面使用呢

 

 八,变量的生命周期

1,生命周期是什么:

生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

2,局部变量的生命周期

   2.1局部变量进入作用域生命周期开始,出作用域生命周期结束。

代码,注释,和结果运行图可以帮助理解:

int main()
{
	{
		int a = 100;//创建一个a变量等于100,代码从上往下执行执行到a的时候才有必要创建,
		//前面a都不存在所以没有存在的道理,到int a这一行才开始创建,生命才开始
		printf("在生命周期内打印的a-->%d\n", a);//打印我们的a
	}//因为我们是在大括号内部打印,没有出a的生命周期所以可以打印成功
	return 0;
}

 3,全局变量的生命周期

        3.1全局变量的生命周期是整个程序的生命周期。

代码,注释,和报错截图可以帮助理解:

int main()
{
	{
		int a = 100;//这种局部变量是进入它的作用域,创建,生命周期开始,离开作用域生命周期结束
		//出了作用域就不能使用了,所以就结束,因为每一个变量都需要占用内存,当局部变量出了作用域,
		//这个变量就不能用了,还有必要让他进行占用内存吗?/没必要,所以它的生命周期就结束了
	}
	printf("%d\n", a);//当我们运行的时候,就会报错
	//同时我们出了大括号就不能使用a了,
	//因为a这个局部变量不能在被使用,所以a变量就被销毁了
	return 0;
}

全局变量的生命周期的总结:

全局变量的生命周期和程序的生命周期是一样的
程序从main()函数第一行开始执行,一直到main()函数的结束,就结束而在main()函数的整个生命周期中,全局变量都可以使用,那说明全局变量都存在,所以说main()函数的生命周期就是程序的生命周期,全局变量在这些周期中都可以使用的话,那么全局变量的生命周期其实是和我们程序的生命周期是相同的
.

总结

以上就是今天要讲的内容,本文仅仅简单介绍了变量的基本概念及验证,可以让你在c语言王国的探险更加有趣,充实。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685239.html

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

相关文章

Go语言基础:基本数据类型

一、整型 1. 整型分类 整型分为以下两个大类: (1)按长度分为:int8、int16、int32、int64 (2)对应的无符号整型:uint8、uint16、uint32、uint64 其中,uint8就是我们熟知的byte型&…

关于spring mvc 的ViewResolver的问题

今天在一个项目使用springboot的spring mvc的时候遇到了一个问题:在controller中使用返回字符串redirect:/xxxx/xxx进行重定向失败,出现了无法解析redirect:/xxxx/xxx。 找了半天才发现视图解析器ViewResolver中没有添加InternalResourceViewResolver 项…

微服务(总): eureka与nacos的区别及心跳配置修改

目录 简介: 1. nacos与eureka的区别 1.0 功能方面 1.1 连接方式不同 1.2 服务异常后多久剔除 1.2.1 eureka介绍: 1.2.2 nacos介绍: 1.3 操作的方式 1.3.1 nacos 专门的可视化界面(如图) 1.3.2 eureka 比较简约(如图) 1.4 保护机制介绍 1.4.1 CAP原则简介:(取自百…

Redis入门(5)-set

Redis中set的元素具有无序性与不可重复性 1.sadd key member[member] 添加元素,若元素存在返回0若不存在则添加 sadd DB mysql oracle sadd DB mysql sadd DB db22.smembers key 查看set中所有元素 smembers DB3.sismember key member 判断元素在set中是否存…

好书精读】网络是怎样连接的 —— 信号在网线和集线器中传输

( 该图由我使用 AI 绘制 ) 目录 每个包都是独立传输的 防止网线中的信号衰减很重要 “双绞”是为了抑制噪声 集线器将信号发往所有线路 每个包都是独立传输的 从计算机发送出来的网络包会通过集线器 、 路由器等设备被转发 , 最 终到达…

智安网络|弹性网络与网络安全:保卫数字世界的关键联结

随着数字化时代的来临,弹性网络和网络安全成为了信息交流和数据传输的关键基础。弹性网络为用户提供了高度可靠、灵活可扩展和强大的网络基础设施,而网络安全则旨在保护这个网络生态系统不受威胁。 弹性网络的定义与重要性 弹性网络的重要性&#xff1a…

【Leetcode60天带刷】day36——56. 合并区间,738.单调递增的数字

​ 题目: 56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1:…

python基础学习9【MinMaxScale()、StandScale()、DecimalScale、transformer】

标准化数据【离差标准化数据、标准差标准化数据、小数定标标准化数据】 离差标准化数据: 数据的整体分布情况并不会随离差标准化而发生改变,原先取值较大的数据,在做完离差标准化后的值依旧较大; 对原始数据的一种线性变换&…

模拟电路系列分享-运放的关键参数

目录 概要 整体架构流程 技术名词解释 1.输入失调电压 2.输入失调电压对电路的影响 3.数据手册中关于失调电压的描述 技术细节 小结: 概要 提示:这里可以添加技术概要 实际运放与理想运放具有很多差别。理想运放就像一个十全十美的人&#xff0…

C语言王国探险记之数据类型

王国探险记系列 文章目录(1) 目录 1,写程序和数据类型有啥关系? 2.C语言里面都有啥数据类型? 1,数据类型的介绍 2,为什么浮点数描述的是小数 3,区分程序中的数字那些是整型&am…

02_深入浅出vite(二)--vue3全家桶+ts构建后管系统

安装基础包 npm create vitelatest # 这里选择的是VueTypescript的组合 cd vue-admin npm install# 先安装基础包 npm install vue-router4 npm i pinia npm i axios npm install sass --save-dev npm install element-plus --save npm install element-plus/icons-vue npm in…

SQL Server数据库 -- 表的基础查询

文章目录 一、单表查询基本结构二、单表查询结构语法 select聚合函数where模糊查询order bygroup byhaving三、多表查询基本结构四、多表查询结构语法 内连接自连接外连接五、总结 前言 学习了数据库,在以后公司等地方,你可能不会用到创建数据库或者表格…

LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问。 往期回顾:LeetCode 单周赛第 348 场 数位 DP 模版学会了吗? T1. 最大字符串配对数目(Easy) 标签&…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目,基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store ,自此主流的几大平台均已提供体验。 项目地址: https://github.co…

Chrome Edge Firefox Safari 如何清除 DNS 缓存

Chrome Edge Firefox Safari 如何清除 DNS 缓存 如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari) Chrome Chromium Edge Firefox Safari clear DNS Cache, flush DNS cache 请访问原文链接:https://sysin.org/blog/clear-browser-dns-cache/,查…

前端Vue仿京东天猫商品属性选择器自定义单选按钮

前端Vue仿京东天猫商品属性选择器自定义单选按钮&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13176 效果图如下&#xff1a; # cc-radioBtnBox #### 使用方法 使用方法 <!-- attrArr&#xff1a;属性数据 clic…

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手

高效多尺度注意力(EMA) 论文介绍简介EMA模块图像分类实验目标检测实验yolov5加入方法yolo注册yaml文件3563.pdf](https://arxiv.org/ftp/arxiv/papers/2305/2305.13563.pdf) 论文介绍 通道或空间的显著有效性 注意机制对产生更多可辨识的 特征表示的显著效果,在各种计算机视…

深度学习-数据增强与扩充

数据增强可以说是数据驱动下的深度学习必经之路,掌握数据,相当于掌握当下主流方向的自动驾驶的命脉,是人工智能不可或缺的资源。本文将介绍最新的利用大模型扩充数据的方式! 先看下变色效果: 左褐色背景图 为原图,右侧为处理后的图! ​ AI day也在自动标注数据方面,着重…

软件测试技术-期末理论知识复习速成

第一章 软件测试概述 什么是软件缺陷&#xff0c;发生软件缺陷的原因是什么&#xff1f; 答&#xff1a;软件缺陷指的是在软件开发过程中出现的错误、缺陷或故障&#xff0c;导致软件无法按照预期的功能运行或者产生错误的结果。 导致软件缺陷的原因可能有&#xff1a;&#…

AI提高软件外包开发效率

最近几年AI技术取得了很大的进步&#xff0c;在一些领域甚至有突破性的进展&#xff0c;虽然无法预测未来AI会如何影响到人们的生活&#xff0c;但可以确定的是AI会在方方面面影响到大家的生活方式&#xff0c;也许未来五年内就会有一个明显的变化。今天和大家分享AI如何提高软…