c34-可变参数分析与宏分析

目录

可变参数

如何编写一个可以计算n个数平均值的函数?

#include <stdio.h>
#include <stdarg.h>

float average(int n, ...)
{
    va_list args;
    int i = 0;
    float sum = 0;
    
    va_start(args, n);
    
    for(i=0; i<n; i++)
    {
        sum += va_arg(args, int);
    }
    
    va_end(args);
    
    return sum / n;
}

int main()
{
    printf("%f\n", average(5, 1, 2, 3, 4, 5));
    printf("%f\n", average(4, 1, 2, 3, 4));
    
    return 0;
}

 

 

函数和宏

例子1:

#include <stdio.h>

#define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0

void reset(void* p, int len)
{
    while( len > 0 ) 
    {
        ((char*)p)[--len] = 0;
    }
}

int main()
{
    int array[] = {1, 2, 3, 4, 5};
    int len = sizeof(array);
    
    reset(array, len);
    RESET(array, len);
    
    return 0;
}

例子2:

#include <stdio.h>

#define ADD(a, b) a + b
#define MUL(a, b) a * b
#define _MIN_(a, b) ((a) < (b) ? (a) : (b))

int main()
{
    int i = 1;
    int j = 10;
    
    printf("%d\n", MUL(ADD(1, 2), ADD(3, 4))); 
	//MUL(1+2,3+4) = 1+2*3+4 = 11
    printf("%d\n", _MIN_(i++, j));
    //( (i++)<(j)?(i++):(j) );     i=3;
    return 0;
}

宏无可替代的优势

 

#include <stdio.h>
#include <malloc.h>

#define MALLOC(type, n) (type*)malloc(n * sizeof(type))

int main()
{
    int* p = MALLOC(int, 5);
    
    int i = 0;
    
    for(i=0; i<5; i++)
    {
        p[i] = i + 1;
        
        printf("%d\n", p[i]);
    }
    
    free(p);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值