1.定义结构体变量,使用这个变量创造一个数组
结构体数组,即结构体组成的数组。先声明一个结构体,再创造数组完成定义。
如:
typedef struct
{
unsigned int Temporary_A;
unsigned int Temporary_B;
unsigned int Temporary_C;
}Struct_Temporary;
Struct_Temporary_Data Array_Temporary[10];
Array_Temporary[2].Temporary_C=20;
2.C语言数据类型:
3.数值结尾的字母修饰:
U:无符号类型。
L:长
例如:0x3A00UL
4.break关键字:
C 语言中 break 语句有以下两种用法:
- 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
- 它可用于终止 switch 语句中的一个 case。
如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。
5.volatile关键字:用来修饰易更改变量。
详解C/C++中volatile关键字_volatile c-优快云博客
6.强制数据转换
强制转换/不同变量类型赋值 注意两个基本点:
1.如果转换前后,数组字节数相等:就直接内存复制粘贴,转换前后变量在内存的2进制完全相等。变量不同只是对相同2进制数据的不同表示方法。
2.如果转换前后,数组的字节不等,就要分类讨论。
一 少字节转多字节 根据转化之前的变量类型选择往新增字节补0还是补1:如果是转换前是负数(变量类型为signed且最高位为1)就补1,其余情况就补0。
情况1 2所示图(注意看 b 和 b2的值,2进制数据是一样的)
- 情况1负数转正数 :在新加字节补1,很大的正数
- 情况2负数转负数 :在新加字节补1,还是负数。跟情况1的2进制数据一致(如上图所示)
- 情况3正数转正数 :在新加字节补0, 还是正数
- 情况4正数转负数 :在新加字节补0, 还是正数
如果变量从2个字节转化为4个字节,转化前后都是signed ,转化前是负数,就会自动补1。
assert关键字:判断
属性关键字:__attribute__()
const关键字:
1.函数形参传递:不能由const int* 隐式转化为int *
typdef 和 #define
- typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
- typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
头文件
头文件不可以声明普通的全局变量,如 : int a=8;
头文件的系列作用:
1.在头文件中定义结构体变量,只要在源文件中引用头文件(即:#include **.h),就可以直接使用。
2.通常1个模块:一个头文件对应一个源文件(如:模块一含有 1.c和1.h),头文件含有源文件的函数声明。别的模块的源文件(如:模块2的 2.c)可以声明后(#include 1.h)直接使用1.c的函数。
---------------------------------------------------------------------------------------------------------------------------------函数
指针函数:
(void *)malloc(Num_Byte);
结构体带有指针函数:C语言 结构体struct成员函数(五)-猿说编程
memset(pointer,value,size);
10.逗号表达式
*(1,2,3)表示的是:3
* 详细解析见:https://blog.youkuaiyun.com/lms1008611/article/details/80027466
*示例代码:
下图定义了一个三目运算符。其中的U32Cnt++就只进行运算,没有起到参数传递的作用