当前位置:网站首页>初始c语言的知识2.0
初始c语言的知识2.0
2022-06-25 12:35:00 【LIn_jt】
写在前言:
本文将粗略介绍变量的作用域与生命周期,常量,字符串,等内容。
变量的作用域与生命周期:
变量的作用域指的是变量所作用的范围,即限定这个变量的可用性的代码范围。而局部变量的作用域即为变量所在的局部范围,请看下图:

此处的a在main函数的函数体内创建,即a只能在这个大括号中使用。

这两张图也是同一个道理,只能在自己限定的范围内使用。
对于全局变量而言,其作用域为整个工程,在任何一处都能使用,请看下图:

可以看到,此处程序没有报错,说明变量a在任何一处都能使用。
常量的分类
c语言的常量又分为以下几种:
字面常量
const 修饰的常变量
#define 定义的标识符常量
枚举常量
对于字面常量而言,就是我们经常所说的,1,2,3,A,B,C这类数字与字母

const修饰的常变量
对于const修饰的变量,我们说其具有常量属性,但其却任然是个变量,也即是变量,但又不完全是,为什么说其具有变量属性呢,请看下图:
const修饰的变量a无法被修改,而编译程序的时候编译器也会报错,即具有常量属性,对于变量属性,请看下图

我们可以看到,编译程序的时候1代码是跑不过去的,由于vs2019不支持延长数组的语法,因此1处代码无法跑过,而2处的代码可以正常运行,这也说明了const修饰的常变量具有变量的属性。
#define 定义的标识符常量
#define定义的标识符常量一般会放在头文件或者是程序的开头,输入格式为:
即#define 变量名 赋值
而它也是彻彻底底的常量,在定义数组时也可以使用,请看下图:
编译程序的时候是肯定没有错误的。
枚举常量
枚举常量需要首先创建枚举类型,这个时候就需要用到关键字enum,用enum来创建枚举类型,比如说,我们要创建性别类型,用以下的代码来实现
要注意的是,此处的MALE语句结束后不用加分号,而是加的逗号,在最后的SECRET语句后方也不加分号。
当我们创建好枚举类型之后,我们就可以来打印出枚举常量的值
请看下图:

此处的MALE赋值给了变量S,而MALE的值其实是0,我们可以将其打印出:

若打印出FEMALE,与SECRET的值,则其它们的值分别为1,2,大家可以试一试。
字符串与转义字符与注释
“HELLO,WORLD”,对于这种由双引号引出来的字符我们称其为字符串,而最重要的一点是,字符串的结束标志为’\0‘,请看以下程序:

咋一看arr1与arr2是相同的,但真的是相同的吗,我们看一下程序的结果:

2号代码打印出了乱码,这是为什么呢,我们可以打开调试窗口来看一下不同。
发现arr1数组比arr2数组多出了一个’\0'字符,哟啊是我们在arr2数组加上'\0',此时打印的结果为
结论,'\0'为字符串结束标志,字符串的结尾会自动加上‘\0’来结束字符串,printf与strlen函数在读取字符串时以‘\0'作为结束标志,但’\0'不会被读取.也即strlen(”abc“)的字符串长度为3.
关于注释,有两种注释方式,对于c语言的注释来说,我们一般用/**/来注释,请看下图
但这种方法有个弊端,即无法嵌套注释,

此处的编译器就报了错误。
第二种注释方式为在语句前加两个//,这种方式快捷实用.

vs可以直接对选中的语句全部注释.
转义字符:
如果我们要在屏幕上打印 c:\code\test.c,是不可以直接输入这段字符串来输出,请看下图

此处的\t被转义为水平制表符,类似的,还有以下转义字符:
\? 在书写连续多个问号时使用,防止他们被解析成三字母词
\' 用于表示字符常量'
\“ 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130
\xdd dd表示2个十六进制数字。 如: \x30 0
其中,要着重介绍的为\ddd,与\xdd,上面已经描述\130,其实\130为八进制数字,其代表的转义字符为其十进制所对应的ASCII码表的字符,请看下图:


在strlen求字符串长度时,要尤为记得’\ddd'中的数字不能超过8,要是超过8,会以另外一种方式计算。如下图

箭头所指的\628中,\62被解析成一个转义字符,因此\628的字符串长度计算为2.
函数:
函数,将一个一个的功能独立开来,例如我们在求两个数最大值时,就可以写函数来实现,以后要进行比较的时候直接进行调用就可以。如下图求两个数较大值的函数

数组
数组,是用来存储相同元素的一个集合,首先,介绍的是其如何定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10};这一句代码即为定义数组,其中int指的是数组中存放数据的类型,[10]指的是数组中最多存储10个元素。
int arr[] = {1,2,3,4,5,6,7,8,9,10};这句代码中也可以将[10]中的10去掉,此时数组中存储元素的个数即为初始化的个数。
若不对数组初始化,则arr[]中必须放置所需数字。
要注意的是,若对数组不完全初始化,数组其他元素默认初始化为0,如下图

此处数组只对第一个元素初始化为0.
数组的下标从0开始,即如果要访问数组中的元素,应该通过下标来访问,如下图

本文完。
边栏推荐
猜你喜欢

AI assisted paper drawing of PPT drawing

數據在內存中的存儲相關內容
Module 5 (microblog comments)

爱可可AI前沿推介(6.25)

. NET in China - What's New in . NET
![[AI helps scientific research] fool drawing of loss curve](/img/38/5cb2a3d33a609dab3874215d5f7b5b.png)
[AI helps scientific research] fool drawing of loss curve

Three lines of code to simply modify the project code of the jar package

My first experience of go+ language -- a collection of notes on learning go+ design architecture

MySQL adds, modifies, and deletes table fields, field data types, and lengths (with various actual case statements)

字符串各操作函数与内存函数详解
随机推荐
时间过滤器(el-table)中使用
关于一道教材题的讲解
Shenzhen mintai'an intelligent second side_ The first offer of autumn recruitment
關於數據在內存中的存儲下
剑指 Offer II 028. 展平多级双向链表
And console Log say goodbye
解析数仓lazyagg查询重写优化
词法陷阱(C)
KVM script management - the road to dream
[flask tutorial] flask development foundation and introduction
字符串入门十八讲合集四
与生产环境中的 console.log 说再见
Include what you use to save chaotic header files
关于三子棋游戏的简易实现与N子棋胜利判断方法
AGCO AI frontier promotion (6.25)
Which Chinese virtual human is better? Sullivan, IDC: Xiaobing Baidu Shangtang ranks in the first echelon
字符串各操作函数与内存函数详解
Resolved: could not find artifact XXX
关于数据在内存中存储的相关例题
Optimization of lazyagg query rewriting in parsing data warehouse