上次我们讲到了C语言中的常量,上次讲到的枚举常量这里在做一下补充,常量值默认从零开始,枚举常量的值不能更改,这里指的是如下图二的输入方式,常量是不能更改的。
图一
图二
那如果我们按如下图的方式给MALE赋值,这种方式不是更改常量的值而是给枚举常量赋初值。
接下来我们来认识字符串,转义字符和注释。
字符串是由双引号(英文双引号)引起来的一串字符也称为字符串字面值,注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串内容。如图,"hello"就是一串字符串。
接下来我们来验证转义字符\0的存在,这里首先要引入一个数组的概念,数组是一组相同类型的元素,如下图,创建一个字符数组arr,当方括号中没有写大小,会根据方括号后面的内容来初始化方括号中的大小,那方括号里有几个元素呢?按f10调试,再按一次f10开始调试 ,调试-窗口-监视-选择任意窗口,我们可以看到结尾处有\0,可见字符串在结尾处隐藏了一个\0字符,\0是字符串的结束标志。
图一
图二
图三
如何理解转义字符\0?
创建两组数组,双引号引起来的是一串字符,单引号引起来的是一个字符。打印字符串,那么我们打印两组数组,结果是否一样呢?我们来验证一下结果,先按f10调试起来,继续按f10调试完成,来看看监视窗口,如下图一,发现两组元素个数不一样,arr1比arr2多了一个\0。我们把它们打印出来看看结果,如下图二,发现打印结果也不一样,这是因为在打印arr1的时候字符串abc后面隐藏了结束标志\0,打印结束。而对于arr2来说,打印到‘c’以后没有遇到\0结束标志。那我们在‘c’后面再加上\0字符,看看打印结果会怎样?如下图三,我们可以看到两组打印结果相同,这样充分的证明了字符串的结束标志是\0。对于字符串来说,它的结束标志是十分重要的。
图一
图二
图三
还有一种方式验证字符串结束标志\0,通过求两组字符串的长度来验证,这里需要运用到strlen(string length)函数,使用该函数需要引用<string.h>头文件。如下图一打印len,发现输出结果是三,为什么不是四呢?\0只是结束标志,但在计算字符串长度的时候不包含。那我们在把两组字符数组长度打印出来。如下图二,我们发现第二组长度是15,其实第二组长度是一组随机值。我们再一次把\0加到数组二,如下图三,可以看到打印结果都是三,再一次验证了结束标志\0。
图一
图二
图三
转义字符指的是转变了字符原来的意思。
假设我们要在屏幕上打印一个目录"C:\test\test.c",我们来看看打印结果,打印的结果并没有\t,这是转义字符导致的。如果我想打印出"C:\test\test.c"这个目录,要怎么打印呢?可以看到\t的意思被转变成了制表符也就是键盘上的tab键,这个时候我们输入\\t替换\t,可以看到成功打印出了目录。再看到下图三,想要打印"ab\ncd",打印结果却没有\n,这个时候\n也转变了它原来的意思,转变成换行的意思。也只需要把\n替换成\\n,就可以达到结果。
图一
图二
图三
图四
以下是C语言中的一些转义字符,可做了解。
这边主要讲一下\ddd和\xdd两个转义字符。\ddd和\xdd中的d分别表示任意一个八进制数和十六进制数。我们来举个例子。如下图一,打印字符'\130',来看看打印结果,发现打印结果是X,这是什么原因?我们要打印的130是个八进制数,转换成十进制数是88(1*8^2+3*8^1+0*8^0),ASCII码值中88对应的就是X。如下图三,打印字符'\x30',30是十六进制数,转换成十进制是48(16*3),ASCII码值48对应的是字符0。
图一
图二
图三
那我们知道strlen函数是用来计算字符长度的,在屏幕中打印"C:\test\328\test.c",它的字符长度是多少呢?答案是14,我们可以动手验证一下。在''C:\test\328\test.c"中\t,\32是两个转义字符。其中8不算八进制数。
注释
1.代码中有不需要的代码可以直接删除,也可以注释掉。
2.代码中有些代码比较难懂,可以加一下注释文字。
注释有两种风格,一种是C语言注释风格/*xxxxxx*/,C语言这种注释风格有缺陷就是不能嵌套注释,另一种是C++风格的注释//xxxxx,这种方式可以注释一行也可以注释多行,是现在比较常用的风格。
以上就是我的C语言初学学习笔记三的全部内容,我会不定时更新我的学习笔记,笔记不会咕很多天的,感谢观看。