专栏首页信数据得永生[c/c++]可变参数加法

[c/c++]可变参数加法

p.s. 无聊研究了一下这个 函数声明:

int add(int count, ...);

调用范例:

add(5, 1, 2, 3, 4, 5);

代码如下:

int add(int count, ...)
{
  va_list va;
  va_start(va, count);
  int sum = 0;
  for(int i = 0; i < count; i++)
    sum += va_arg(va, int);
  va_end(va);
  return sum;
}

其实可以不用va宏,前提是你要熟悉堆栈结构:

int add(int count, ...)
{
	
  char *p = (char *)&count;
  p += sizeof(count);
  int sum = 0;
  for(int i = 0; i < count; i++)
  {
    sum += *(int *)p;
    p += sizeof(int);
  }
  return sum;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【备忘录】c++ 整形浮点字符串 类型转换

    一、C风格字符串 1.<stdlib.h>中的转换函数  atoi atol atoll itoa ltoa ultoa lltoa atof e...

    ApacheCN_飞龙
  • C++ 现代编程风格速查表

    ApacheCN_飞龙
  • [2013.9.30]c#取三种时间

    TimeSpan ts = DateTime.Now – new DateTime(1970, 1, 1, 8, 0, 0); string stamp =...

    ApacheCN_飞龙
  • [优秀题解]题目1277[Lucky Word]

    题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这...

    编程范 源代码公司
  • NYOJ-----最少乘法次数

    最少乘法次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用...

    Gxjun
  • Data Structure_Visualization

    选择排序很简单,遍历所有元素,查看一下他们的之后最小的元素和当前元素交换即可。模板函数使用上面的swing模板。为了更清楚显示出排序的过程,可以用不同颜色代表排...

    西红柿炒鸡蛋
  • 无锁编程(三) - 忙等待

    概念 忙等待可以认为是一种特殊的忙等待 忙等待分类 Peterson算法 xchg解法 TSL解法 自旋锁 Peterson算法 Peterson算法是一个实现...

    三丰SanFeng
  • 13:图像模糊处理

    13:图像模糊处理 总时间限制: 1000ms 内存限制: 65536kB描述 给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理: 1....

    attack
  • 2007北京市小学生程序设计友谊赛详细答案

    注意:网络上有些人说round()不是四舍五入,而是四舍六入五成双,即round(5.5) = 6, round(6.5) = 6。 我通过在Dev C++, ...

    海天一树
  • UNIX域协议(无名套接字)

    关于什么是UNIX域套接字可以参考:https://cloud.tencent.com/developer/article/1018893 这里主要介绍非命名的...

    xcywt

扫码关注云+社区

领取腾讯云代金券