宏定义测试 宏定义取出指定内存地址上单/双字节数据实验环境编辑器-->vscode 编译器-->gcc测试代码#include <stdio.h>/* 得到filed在结构体中的偏移量 */#define FOFFSET(type, field) ((size_t) & ((type *)0)->field)typedef struct{ unsigned char a; unsigned int b; unsigned s...
宏定义测试 宏定义取出指定内存地址上单/双字节数据实验环境编辑器-->vscode 编译器-->gcc测试代码#include <stdio.h>#define MEM_BYTE(x) (*((unsigned char *)(x)))#define MEM_WORD(x) (*((unsigned short *)(x)))int main(void){ unsigned char *p = NULL; unsigned short *p1 = ...
C语言之位运算符 位运算符分析1.C语言中的位运算符 C语言中的位运算符直接对bit位进行操作,其效率最高。速度快于四则运算和逻辑运算。2.左移和右移的注意点 -左操作数必须为整数类型 ·char和short被隐式转换为int后进行移位操作-右操作数的范围必须为:[0,31];-左移运算符<<将运算数的二进制位左移 ·规则:高位丢弃,低位补0-右移运算符&g...
C语言之逻辑运算符 1.逻辑运算符分析1.1程序中的短路-||从左向右开始计算 ·当遇到为真的条件时停止计算,整个表达式为真 ·当所有条件为假时表达式才为假-&&从左向右开始计算: ·当遇到为假的条件时停止计算,整个表达式为假 ·当所有条件为真时表达式才为真1.2逻辑表达式中,&&比||具有更高的优先级2.!究竟是什么?小结在程序中的逻辑表达式遵从短路规则在&a...
C语言之单引号和双引号 1.单引号和双引号C语言中的单引号用来表示字符字面量C语言中的双引号用来表示字符串字面量(指针)小贴士字符字面量被编译为对应的ASCII码字符串字面量被编译为对应的内存地址printf的第一个参数被当成字符串内存地址内存的低地址空间不能再程序中随意的访问小结单引号括起来的单个字符代表整数(ASCII码)双引号括起来的字符代表字符指针C编译器接受字符和字符串的比较,无任何意义C编译器允许字符串对字符...
C语言之转义符和接续符 1.接续符的使用编译器会将反斜杠剔出,跟在反斜杠后面的字符自动接续到前一行在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格接续符适合在的定义宏代码块时使用2.转义符的意义C语言中的转义符(\)主要用于表示无回显字符,也可用于表示常规字符2.1转义符的使用当反斜杠(\)作为转义符使用时必须出现在单引号或者双引号之间小结C语言中的反斜杠(\)同时具有接续符和转义符的作用-作为接续符使...
C语言之enum,sizeof,typedef分析 1.1枚举类型的使用方法enum是C语言中的一种自定义类型enum值是可以根据需要自定义的整型值第一个定义的enum的值默认为0默认情况下的enum值是在前一个定义值的基础上加1enum类型的变量只能取定义时的离散值1.2枚举类型的特殊意义enum中定义的值是C语言中真正意义上的常量在工程中enum多用于定义整型常量相关实验代码#include <stdio.h>enum{ ...
C语言之struct和union分析 1.struct的小秘密C语言中的struct可以看做变量的集合struct的问题:-空结构体占用多大内存?相关测试代码:#include <stdio.h>struct TS{ };int main(){ struct TS ts1; struct TS ts2; printf("sizeof(struct TS) = %ld",sizeof(struct...
C语言之const和volatile分析 1.const只读变量const修饰的变量是只读的,本质还是变量const修饰的局部变量在栈上分配空间const修饰的全局变量在全局数据区分配空间const只在编译期有用,在运行期无用const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值发符号的左边。2.const全局变量分歧在现代C语言编译器中,修改const全局变量将导致程序崩溃注意:标准C语言编译器不会将const修饰的全局...
C语言之goto和void分析 1.遭人遗弃的goto高手潜规则:禁用goto项目经验:程序质量与goto的出现次数成反比最后的判决:将goto打入冷宫goto副作用测试代码#include <stdio.h>#include <malloc.h>void func(int n){ int* p = NULL; if( n < 0) { goto STATUS; } p = ...
C语言之循环语句 1.循环语句分析循环语句的基本工作方式-通过条件表达式判定是否执行循环体-条件表达式遵循if语句表达式的原则do,while,for的区别-do语句先执行后判断,循环体至少执行一次-while语句先判断后执行,循环体可能不执行-for语句先判断后执行,相比while更简洁do...while语句的循环方式while语句的循环方式for语句的循环方式相关实验代码#include <stdio....
C语言之分支语句 1.if语句分析-if语句用于根据条件选择执行语句-else不能独立存在且总是与它最近的if想匹配(else之前的if)-else语句后可以连接其他if语句if语句中零值比较的注意点-bool型变量应该直接出现于条件中,不要进行比较-变量和0值比较时,0值应该出现在比较符号左边-float型变量不能直接进行0值比较,需要定义精度2.switch语句分析switch语句对应单个条件多个分值的情形ca...
C语言之变量属性 1.C语言的变量属性C语言中的变量可以有自己的属性在定义变量的时候可以加上"属性"关键字“属性”关键字指明变量的特有意义语法: property type var_name示例:2.auto关键字auto即C语言中局部变量的默认属性auto表明将被修饰的变量存储于栈上编译器默认所有的局部变量都是auto示例:3.register关键字register关键字指明将局部变量存储于寄存器中regi...
C语言之类型转换 1.类型之间的转换C语言中的数据类型可以进行转换-强制类型转换-隐式类型转换2.强制类型转换强制类型转换的语法-(Type)var_name;-(Type)value;强制类型转换的结果-目标类型能够容纳目标值:结果不变-目标类型不能容纳目标值:结果产生截断(舍弃高字节,保留低字节)注意:不是所有的强制类型转换都能成功,当不能进行强制类型转换时,编译器将产生错误信息。相关测试代码#include ...
C语言之浮点数秘密 1.内存中的浮点数浮点数在内存的存储方式为:符号位,指数,尾数float与doube类型的数据在计算机内部的表示法是相同的,但由于所占存储空间的不同,其分别能够表示的数值范围和精度不同。2.浮点数存储示例浮点数的转换(1).将浮点数转换成二进制(2).用科学计数法表示二进制浮点数(3).计算指数偏移后的值注意:计算指数时需要加上偏移量,而偏移量的值与类型有关。示例:对于指数6,偏移后的值如下:fl...
C语言之有符号与无符号 1.计算机中的符号位数据类型的最高位用于标识数据的符号-最高位为1,表明这个数为负数-最高位为0,表明这个数为整数1.1相关测试代码#include <stdio.h>int main(){ char c = -5; short s = 6; int j = 7; printf("%d", ( (c & 0x80) != 0 )); printf("%d\...
C语言之基本数据类型 1.数据类型概念数据类型是固定内存的别名,是创建变量的模子。1.1相关测试代码#include int main(){ char c = 0; short s = 0; int i = 0; printf("%d, %d", sizeof(char), sizeof(c)); printf("%d, %d"