当前位置:网站首页>初始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开始,即如果要访问数组中的元素,应该通过下标来访问,如下图

本文完。
边栏推荐
- Oral English - continuous reading
- Sword finger offer II 025 Adding two numbers in a linked list
- MySQL writes user-defined functions and stored procedure syntax (a detailed case is attached, and the problem has been solved: errors are reported when running user-defined functions, and errors are r
- Common colors for drawing
- 关于三子棋游戏的简易实现与N子棋胜利判断方法
- 字符串各操作函数与内存函数详解
- 剑指 Offer 第 1 天栈与队列(简单)
- 坡道带来的困惑
- 汇编标志位相关知识点(连)
- 关于数据在内存中的存储下
猜你喜欢

剑指offer 第 3 天字符串(简单)

药物设计新福音:腾讯联合中科大、浙大开发自适应图学习方法,预测分子相互作用及分子性质

Sword finger offer II 029 Sorted circular linked list

Conway's law can not be flexibly applied as an architect?

Meichuang was selected into the list of "2022 CCIA top 50 Chinese network security competitiveness"

一篇文章讲清楚MySQL的聚簇/联合/覆盖索引、回表、索引下推

The editor is used every day. What is the working principle of language service protocol?

Summer Ending

It is extraordinary to make a move, which is very Oracle!

My first experience of go+ language -- a collection of notes on learning go+ design architecture
随机推荐
关于数据在内存中存储的相关例题
汇编标志位相关知识点(连)
Analyse de l'optimisation de la réécriture des requêtes lazyagg de l'entrepôt
It's an artifact to launch a website in a few minutes
QT display ffmpeg decoded pictures
中国虚拟人哪家强?沙利文、IDC:小冰百度商汤位列第一梯队
Drawing cubes with Visio
Restful and RPC
Used in time filter (EL table)
与生产环境中的 console.log 说再见
list. replace, str.append
Serevlt初识
[转]以终为始,详细分析高考志愿该怎么填
You can't specify target table 'xxx' for update in from clause
[AI helps scientific research] fool drawing of loss curve
解析数仓lazyagg查询重写优化
Alibaba stability fault emergency handling process
关于三子棋游戏的简易实现与N子棋胜利判断方法
三行代码简单修改jar包的项目代码
爱可可AI前沿推介(6.25)