可变参数
使用可变参数流程如下:
1:包含可变参数的头文件
2:创建va_list变量作为缓冲
3:使用va_start函数指明可变参数。
4:使用va_arg读取
5:使用va_end释放缓冲
#include <stdarg.h>//使用可变参数的头文件
int my_f(int num,...)
{
int i = 0;//for循环控制变量
va_list parameter_n;//使用va_list类型为可变函数创建缓冲
parameter_n int ret = 0;
va_start(parameter_n,num);//指明函数参数num后为可变参数
for(i = 0; i < 3; i++)
{
//读取指针位置的数据,每读取一次偏移一次。从num后依次读取(从左到右)
ret += va_arg(parameter_n,int);
}
va_end(parameter_n);//释放缓冲
return ret;
}
位域
形式
可以看到就是带冒号的结构体。在typdef的使用和结构体是一样的
struct AAA
{//从上到下为从低位到高位。
unsigned int TIM_1 : 0x01;//冒号左边为该段的名称,右边为占用字节。
unsigned int TIM_2 : 0x01;
unsigned int TIM_3 : 0x01;
unsigned int TIM_4 : 0x01;
unsigned int TIM_5 : 0x01;
unsigned int TIM_6 : 0x01;
unsigned int TIM_7 : 0x01;
}aaa;
aaa.TIM_1 = 0x00;
内存存储
为总该结构体占用的总字节,没用完数据类型也占用其余空间。如果溢出了数据类型的空间,如char为8位,但是位域占用了9位,那么在地址偏移一个数据类型的字节数并在这个地址上的空间继续存储。