结构体的参数传递
在进行传值的时候,用结构体封装有利于函数的传递。
用指向结构体变量的指针作为函数参数。
文件的包含
#include操作是,若后面带的是<>,则文件在安装路径中找;
若后面带的是“”,则文件在源目录中找。
大小端和字节序
大字节序机器将位字段从最高有效字节压缩到最低字节。
小字节序机器会将位域从最低有效字节打包到最高字节。
当我们自己读取十六进制数时,我们从最高有效字节到最低读取它们。因此,读取大字节序的内存转储比读取小字节序的存储更容易。在读取位域的内存转储时,它甚至比读取整数还要困难
union {
unsigned short value;
unsigned char byte[2];
struct {
unsigned short a : 4;
unsigned short b : 4;
unsigned short c : 4;
unsigned short d : 4;
} field;
} u;
位域
在结构内声明位域的形式如下:
struct
{
type [member_name] : width ;
};
元素 | 描述 |
---|---|
type | 只能为 int(整型),unsigned int(无符号整型),signed int(有符号整型) 三种类型,决定了如何解释位域的值。 |
member_name | 位域的名称。 |
width | 位域中位的数量。宽度必须小于或等于指定类型的位宽度。 |
带有预定义宽度的变量被称为位域。位域可以存储多于 1 位的数,例如,需要一个变量来存储从 0 到 7 的值,您可以定义一个宽度为 3 位的位域
函数指针
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。
那么这个指针变量怎么定义呢?虽然同样是指向一个地址,但指向函数的指针变量同我们之前讲的指向变量的指针变量的定义方式是不同的。例如:这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“*”,即(*p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。