可变参数 & 位域

 可变参数

使用可变参数流程如下:

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位,那么在地址偏移一个数据类型的字节数并在这个地址上的空间继续存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值