C语言相关概念和易错语法(1)

前言:首先,我的博客主要记录的是部分容易遗忘,但是比较重要或是值得了解的知识点。很多基本概念我并不会阐述,所以它更适合用来复习;其次,这些知识点是从我自己的角度出发整理的,因此我认为的重点可能和你不同,有的内容可能不完整或有错误,希望大家多多包涵,如果能指出我的错误,我会非常感激!

1.关于编译器、链接器、集成开发环境的概念

编译器、链接器:

我们写的源文件并不可以直接运行,例如test.c只是一个C语言的代码块,而电脑只能识别二进制的指令,所以要让test.c能被执行,就要让它从C语言转为二进制的计算机能识别的指令。编译器可以将我们的多个.c文件转为多个.obj文件,这些.obj文件又可以通过被链接器打包转为一个.exe程序,这个程序便可以直接被电脑执行。

集成开发环境(IDE):

简单地,集成开发环境就是我们平时写代码用到的软件,如Visual Studio 2022,它里面包含了如上所说的编译器、链接器等等。它使得我们只用负责写代码,而不用关心其他东西,让我们写代码更方便。

2.关键字易错:注意define并不是C语言的关键字,它是由编译器实现的,而不是C语言

sizeof属于关键字,不要以为它是函数。sizeof计算的是变量或类型的长度,包括自定义类型struct和int [n]。使用sizeof时,除了写sizeof(a)还可以写成sizeof  a

3.字符串\0和printf理解:

617806540df44d84b8d5ea759092ebee.png

这段代码可以帮助我们理解\0和printf,我第一次只想打印arr1,但你仔细看就发现在一堆“烫”的乱码后跟着arr2的字符,说明printf不遇到\0就不会停,会一直访问内存并打印,在这里printf一直访问到我创建的arr2后面隐藏的的\0才停下来。当我打印arr2的大小时,发现它也确实藏着一个\0,\0算一个字符,会占用一个字节,因此这里打印的是7而不是6。

如果我限制arr2的大小,我们就会发现又多了一段乱码。

746a9e7c9a24476fa22b91651e573630.png

这是因为我限制了arr2的大小至多是6个字节,因此\0没有容纳空间了,导致printf打印过来时arr2的末尾没有\0,因此打印不会停止,会继续打印直到遇见\0。

当然,这种写法本身就是错误的,但我们可以关注这种错误导致的现象理解\0的作用。

4.转义字符:

第一类转义字符:防止被解析成3字母词,防止在编译过程中你想表达的意思被计算机“误会”,如 \?  \\  \'  \"

这类转义字符真正想要表达的意思是第一根斜杠\之后的那个字符要表达的

6f16b845fca64fcdad8c3ecf9b1ab527.png

第二类转义字符:如\n  \a  等有实际含义,这里不展开讲述,不用全部记住

第三类转义字符:进制转换

\xxx:这里xxx表示八进制数字,如\010表示9,\130表示字符X,除了这里,八进制数字一般以0开头,如011、070都是八进制形式

\xyy:这里yy表示十六进制数字,前面的x是十六进制的标志,必须写,如\xa表示10

\xxx和\xyy均视为一个字符,它们的含义是转化为十进制后所对应的ASCII码值所对应的意思

5.数据类型中的内置类型:布尔类型(_Bool)与整型、浮点型、字符型都是内置类型,其中布尔类型的大小是1字节,以_Bool a = true赋予变量真假意义,但其实布尔类型也可被替代,C语言中一般用0表示假,非0表示真。

6.全局变量位于静态区,局部变量(栈区)前面加一个static后由局部变量变为静态变量,储存位置由栈区变为静态区。全局变量加上static后作用域缩小,无法通过extern被外部文件访问。

7.作用域与生命周期有区别,如static修饰变量使其成为静态变量后,其生命周期与全局变量的生命周期相同,但其作用域在大括号以内,可能远远小于全局变量

5647a3ca619448738b7e77a35c20a621.png

8.long类型的大小可能与int相同(4字节),也有可能是8字节,但long long一定是8字节;

double和long double类型大小可能相同(8字节),也可能是16字节

9.一般创建浮点数默认double类型,如3.14,如果要创建float类型,数字后加f,如3.14f。

10.sizeof要用size_t来接收,strlen函数的使用要用%zd形式来打印和用size_t来接收。

原因是C语言标准只说明了sizeof的计算结果、strlen函数的返回类型是无符号整数(unsighed),但并没有指出是无符号短整型、整形或是长整型,因此每种编译器根据自己的情况将自己采用的返回类型重命名为size_t,这方便程序员的使用。

以上10点仅为我的部分整理,今后可能会添加,也欢迎大家留下意见!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值