【C进阶】28、指针和数组分析

2021-12-30
阅读 4 分钟
2.1k
2)指针是一种特殊的变量,与整数的运算规则为: p + n; <--> (unsigned int)p + n * sizeof(*p)当指针p指向一个数组里的元素时,p + 1将指向当前元素的下一元素;p - 1将指向当前元素的上一元素。

【C进阶】27、数组的本质分析

2021-12-29
阅读 2 分钟
1.3k
a是数组首元素的地址,类型是int*;*a就是首元素,sizeof(*a)可以获得数组首元素的内存大小;a同时也代表这一段内存,sizeof(a)可以获得数组的内存大小;sizeof(a) / sizeof(*a) = 数组元素的个数

【C进阶】26、指针的本质分析

2021-12-27
阅读 2 分钟
1.7k
Summary1)指针的本质是变量,特殊在于存储的内容是一段内存地址。2)在指针声明时,*号表示所声明的变量为指针;在指针使用时,*号表示取指针所指向的内存空间中的值3)指针作为函数参数:指针是变量,因此可以声明指针参数当一个函数体内部需要改变实参的值则需要使用指针参数;函数调用时实参值将复制到形参指针适用...

【C进阶】25、#和##运算符

2021-12-25
阅读 1 分钟
2.2k
Summary1)'#'用于在预处理期将宏参数转换为字符串;只在宏定义中有效,编译器不知道'#'的存在2)可以使用#+函数名,在调用时打印函数名3)'##'用于在预处理期 拼接两个标识符;只在宏定义中有效,编译器不知道'##'的存在4)可以使用'##'快速定义结构体、使用结构体,快速定义类等。·#和##运算符分析1、'#''#'运算符用于...

【C进阶】24、#pragma分析

2021-12-23
阅读 4 分钟
3.2k
1)#pragma 用于 指示编译器 完成一些特定的动作;#pragma 所定义的很多指示字是编译器特有的,所以在不同的编译器间是不可移植的

【C进阶】#error和#line使用分析

2021-12-21
阅读 2 分钟
1.8k
Summary1)#error用于生成一个编译错误信息;#warning用于生成一个编译警告信息;2)编译过程中的任何错误信息意味着无法生成最终的可执行程序3)语法:#error/#warning message,message不需要用双引号包围4)#line用于指定后续代码的起始行号和文件名5)语法:#line line filename filename可胜率,是个字符串(双引号...

【C进阶】22、条件编译分析

2021-12-19
阅读 3 分钟
2.3k
3)if else在运行期进行分支判断,一定会被编进目标代码;条件编译指令在预编译期进行分支判断,可能产生不同的代码段,因此编进目标代码的代码段不确定

【C进阶】21、宏定义与使用分析

2021-12-17
阅读 3 分钟
2k
Summary1)#define是预处理器处理的单元实体之一,在预编译期进行文本替换2)#define定义的宏可以出现在程序的任意地方,定义之后的代码都可以使用3)#define可以定义宏常量,本质上是字面量4)define可以定义表达式,使用上类似函数;功能可能更强大(类型可以作为参数、求数组大小);更容易出错(当和其他运算混合在...

【C进阶】20、链接过程简介

2021-12-15
阅读 3 分钟
1.9k
Summary1)链接的定义:将目标文件最终链接为可执行程序 2)链接的2种方式:静态链接:目标文件会被直接*链接*进可执行程序。slib.a被删掉后,程序依旧可以运行动态链接:程序启动后才动态加载目标文件。dlib.so被删掉后,程序无法运行3)静态链接和动态链接方式的抉择:静态链接:适用于比较简单的程序,开发出来不需要...

【C进阶】19、编译过程简介

2021-10-30
阅读 2 分钟
1.6k
2)点击Build之后,IDE会进行预编译(生成中间.i文件)、编译(生成汇编代码.s文件)、汇编(生成目标文件.o文件)、链接(生成可执行程序.out文件)。

【C进阶】18、三目运算符和逗号表达式

2021-10-29
阅读 2 分钟
2.3k
Summary1)在C语言中,三目运算符返回的结果是一个右值,并不是一个变量(不能放在赋值符号左侧) 2)三目运算符的返回类型:通过隐式类型转换规则返回b和c中的较高类型(注意:char和short在运算时会隐式转换成int)当b和c不能隐式转换到同一类型时编译出错3)逗号表达式(exp1, exp2, ... expN)逗号表达式用于将多个...

【C进阶】17、++和--操作符分析

2021-10-25
阅读 3 分钟
1.5k
Summary1)++和--参与混合运算结果是不确定的,如r = (i++) + (i++);等C++只规定了++和--对应指令的相对执行次序(取值和自增的相对顺序)++和--对应的汇编指令不一定连续执行在混合运算中,++和--的汇编指令可能被打断执行 (取值和自增可能被打断了,中间插入了其他代码)2)编译器的贪心法编译器以从左向右的顺序,一...

【C进阶】16、位运算符

2021-10-10
阅读 2 分钟
2.6k
Summary1)C语言中的位运算符:运算符意义规则&按位与全1得1,有0得0I按位或有1得1,全0得0^按位异或相同为0,不同得1~取反1变0, 0变1<<左移高位丢弃,低位补0·>>右移高位补符号位,低位舍弃2)左移、右移的注意点:左操作数必须是整数类型char和short被隐式转换为int后进行操作右操作数的范围必须为:[...

【C进阶】15、逻辑运算符

2021-10-07
阅读 2 分钟
1.6k
3)逻辑表达式中&&比||的优先级更高,表现为:当&&和||在同一个表达式中出现时,整个表达式被看作一个||表达式。先计算&&表达式,最后计算整个的||表达式,某个表达式为真的时候,整个||表达式就短路了。

【C进阶】14、单引号和双引号

2021-09-25
阅读 2 分钟
2.6k
4)注意:char类型和char*类型要用正确的字面量进行初始化;虽然char a = ""; char* s = 'a';都能编译的过,但使用的时候就会出意想不到的段错误。

【C进阶】13、接续符和转义符

2021-09-11
阅读 2 分钟
2.3k
Summary1)编译器会将反斜杠'\'剔除,跟在反斜杠后面的字符自动接续到前一行2)在接续单词时,反斜杠'\'之后不能有空格,反斜杠'\'的下一行之前也不能有空格3)接续符'\'适合用于定义宏代码块,提高可读性4)C语言中的转义符'\'主要用于表示无回显字符(不会在屏幕上显示的),也可以用于表示常规字符。5)当反斜杠'\'作...

【C进阶】12、注释符号

2021-09-11
阅读 1 分钟
1.9k
Summary1)编译器在编译过程中使用空格替换整个注释 2)反斜杠'\'是接续符,编译器会将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行3)字符串里的//和/**/都会被看做斜杠字符,不会作为注释4)/*..*/注释不能嵌套使用5)注意注释用来描述程序的原因和意图,而不是逐步描述语句注释要避免二义性,避免缩写注释要精...

【C进阶】11、enum、typedef、sizeof

2021-09-05
阅读 2 分钟
2.7k
Summary1)enum是C语言中的一种自定义类型; enum类型的变量只能取定义时的离散值。2)enum在C语言中可以定义真正意义上的常量,工程中常用枚举来定义常量(无名枚举)。3)sizeof是编译器的内置指示符,sizeof的值在编译期就确定。4)sizeof是C语言的内置关键字而不是函数在编译过程中所有的sizeof将被具体的数值替换,...

【C进阶】10、struct和union分析

2021-09-05
阅读 2 分钟
2.3k
Summary1)空结构体的大小在不同的编译器下行为不同:gcc编译器下空结构体的大小为0;bcc和vc编译器认为空结构体的语法错误,编译错误 2)柔型数组的要点: {代码...} 柔性数组的最后一个数组是一个标识符,不占用空间,sizeof(struct SoftArray)得到的是数组长度占用的空间。柔性数组需要从堆空间中申请,可以自由分配...

【C进阶】9、const和volatile分析

2021-08-29
阅读 3 分钟
2.7k
2)分配空间:const修饰的局部变量在栈上分配空间。const修饰的全局变量在全局数据区(或只读存储区)分配空间。(这两点印证了const修饰的仍然是变量,因为在内存中依然会分配空间)

【C进阶】8、goto和void分析

2021-08-29
阅读 2 分钟
2k
2)在C语言中,如果函数没写返回值,则默认返回值类型是int;如果函数没有写参数列表,则函数接受任意数量的参数。因此,如果函数没有返回值,必须显式声明返回值类型为void;如果函数没有参数,则必须声明参数列表为void。

【C进阶】7、循环语句

2021-08-22
阅读 1 分钟
1k
1)do...while语句先执行后判断,循环体至少执行一次;while语句先判断后执行,循环体可能不执行;for语句先判断后执行,相比while更简洁(因为for的一行里包括了循环变量初始化、条件判断、修改循环变量三个要素)。

【C进阶】6、分支语句

2021-08-15
阅读 1 分钟
1.1k
1) 和0值、常量值(立即数)进行比较时,需要把立即数放在比较符号的左侧,如if(0 == i),避免出现if(i = 0)这样的书写错误。

【C进阶】5、变量属性

2021-08-08
阅读 2 分钟
1.7k
2)register将声明的局部变量存储于寄存器中;register是一种请求,不一定成功;不能用取地址符&去取register变量的地址

【C进阶】4、类型之间的转换

2021-08-01
阅读 2 分钟
2.4k
Summary0)工程中需要避免隐式转换,强转有时无法避免,但一定要时刻注意操作的数据的类型,对操作的数据的类型要十分明晰,对转换的结果也要十分明晰。1)C语言中有强制类型转换和隐式类型转换2)强制类型转换的语法为:(Type)var; 强制类型转换的结果为:目标类型能够容纳目标值:结果不变目标类型不能容纳目标值:结...

【C进阶】3、浮点数的秘密

2021-08-01
阅读 2 分钟
1k
3)浮点数的转换如:浮点数-8.25的二进制转换,float类型:1. 符号位:1(负数)2. 绝对值二进制:1000.01(整数部分的指数依次为0,1,2...;负数部分的指数一次为-1,-2,-3...)3. 科学计数法:1.00001 * 23,指数为34. 指数+偏移:3 + 127 = 130 <--> 1000 0010(float的指数占8位)5. 尾数:尾数部分为00001,占23...

【C进阶】2、有符号与无符号

2021-08-01
阅读 3 分钟
3k
Summary0)在进行数据运算、使用变量的时候,一定要十分清楚变量的具体类型!1)对于整形数据,数据类型的最高位用于标识数据的符号:最高位为1表示负数,最高位为0表示整数。2)类型溢出时的运算总结:溢出的值为正的:实际值为:溢出后的值 - 该类型能表示的个数溢出的值为负的:实际值为:溢出后的值 + 该类型能表示...

【C进阶】1、基本数据类型

2021-08-01
阅读 1 分钟
1.1k
Summary1)数据类型的本质是固定内存大小的别名;变量的本质是具体的一段内存的别名。 2)变量隶属于某一种数据类型,变量所在的内存大小取决于其所属的数据类型。1、什么是数据类型数据类型可以理解为固定内存大小的别名数据类型是创建变量的模子2、变量的本质变量是一段实际连续存储空间的别名程序中通过变量来申请并...

【C入门】12、多文件程序设计

2021-07-31
阅读 2 分钟
1.9k
1)头文件(.h)是源文件(.c)的 接口定义文件。接口指的是可被其他文件访问的函数或者数据。如果a.c中想使用b.c中定义的函数或变量,就可以通过b.h来使用,b.h中则声明了b.c中的函数和变量。

【C入门】11、自定义数据类型

2021-07-26
阅读 6 分钟
3.1k
3)struct用于自定义新类型,能够将不同数据类型的变量组成一个集合。struct创建新类型是一条合法的语句,因此要以分号;结束,里面的每个定义变量的语句,也都是以分号;结束。