主要为个人学习时知识的梳理与理解,肯定会有疏漏或者错误还望在包涵的时候帮我指出一下错误之处!感激不尽!
C语言中的常量分为如下几种:
1.字面常量
字面常量,顾名思义,在其字面就可以知道其主要内容的常量。
比如114,51.4。
‘A’用单引号扩住的是字符,而“AKD”则是字符串常量。
2.const 修饰的常变量
常变量是什么?在搞清楚这三个字之前,先搞清楚变量是什么会更容易理解。
变量好似一个碗,比如int a;相当于捏出来了一个可以专门放整数的碗,但它具体的量则取决与人为编写程序的时候,碗里呈了什么汤取决于程序中为其赋的值,根据呈汤的顺序的不同,整碗汤也会变化,这是我对变量的大体理解。
比如
;
运行后输出:200
而const 修饰的常变量如下:const int a =100;
这个时候,好像给碗盖了个锅盖,不能直接修改,由const修饰之后,上述程序中 a=200这一行将会在运行时报错。
这个时候原本是变量的a被上了个锅盖赋予了类似常量的属性,但它本质依旧是变量,这碗它还是那个碗啊,他只是加了个锅盖!
不能只拿碗做比喻,这样有失严谨,所以为了验证其本质,我们让数组来为我们揭开它的本质。
为什么用数组?因为数组的大小必须是常量
可以看到,数组不认它是个常量,所以其本质依旧是变量。
3.#define定义的标识符常量
这种类型的常量就很像一个汤桶,也像一个全局变量,为100取了名字为SOUP,接下来都可以借用SOUP来为变量赋上100这个值
最后输出100
4.枚举常量
用于存储一些有很多种类常量用的一种常量存储方法
枚举类型默认从0开始计数
输出为1,若是输出r也是1.
字符串,让我康康你的字节长度
前文提过,用单引号‘w’括起来的是一个字符,当字符数量较多时比如abcdefg,则需要用双引号来扩起以表示这是字符串。原因是 C语言没有字符串类型。
每一种类型都有自己的字节量,所以当我们使用一些类型想为其放入字符串的时候要考虑一下字符串的长度可不可以塞进去,比如创建一个char类型的数组[]里有足够大的字节量才能放下想放进数组里的东西,但是其实什么都不填它就会自己测量所需要的大小。
也就是只写:char num[]{"abced"}他就会自己衡量
不过单独它自己知道可不行,字符串这玩意所占的字节长度并没有看上去那么简单。
比如“abcdefg”它在内存中所占的字节其实有8个
因为字符串的末位还有一个没有显示出来的\0,这玩意也占一个字节,因为\0是字符串结束的标识符
其原理是:声明一个字符串的时候会在内存内开辟一个空间,但是一般都是从中间开辟,这样子开辟空间的话是只知道头在哪而尾巴在哪是不知道的,这个时候整个编译器想要知道这条字符串到底在内存哪里结束的时候就必须找到\0。
而还有一个名词就是字符串长度
求取字符串长度的函数是strlen,注意,它是返回字符串长度的值,所以需要为他的返回值声明一个变量。stlen包含在string.h的头文件中。
字符串长度则与字节是不一样的概念
此时,“abcedfg”的字符串长度则是7。
我转义了你的转义
\n用于在输出的时候换行,但我想看到输出出来的时候是\n这两个字而不是换行该怎么办呢?
在此之前,应该先了解\这个玩意的作用到底是什么,为什么n前面跟了个\就变成了换行符呢?
\其实是使用转义符前的一个声明,在 C语言中,为一些其他的字母或者符号前添加\都会产生不同的转义效果。
\? 书写多个问号时防止被解析成三字母词
\' 用于表示字符常量‘
\a 蜂鸣(电脑会”嘟“一下)
\b 退格符
\n 换行符
\ddd 表示1到3个八进制数字
\xdd 表示2个十六进制数字
\\ 表示一个反斜杠,防止其产生转义效果(转义了你的转义( ゚∀。))