怎么设置iis默认网站,昆明做网站建设公司,湖北神润建设工程网站,浦口区建设局网站1.可变参数产生原因
首先来看一个简单的例子。
int Add(int x, int y)
{return x y;
}
int main()
{int sum 0;sum Add(1, 2);//sum Add(1, 2, 3);//sum Add(1);system(pause);return 0;
}
我们可以看到#xff0c;对于这个代码只可以计算两个数的加法。 …1.可变参数产生原因
首先来看一个简单的例子。
int Add(int x, int y)
{return x y;
}
int main()
{int sum 0;sum Add(1, 2);//sum Add(1, 2, 3);//sum Add(1);system(pause);return 0;
}
我们可以看到对于这个代码只可以计算两个数的加法。 这样我们引入一个新的知识点
可变参数实现求任意数的和
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#include stdarg.h
#include stdlib.hint Add(int num, ...)
{int sum 0;va_list arg;va_start(arg, num);for (int i 0; i num; i){sum va_arg(arg, int);}va_end(arg);return sum;
}
int main()
{printf(%d\n, Add(4, 2, 3, 4, 5));system(pause);return 0;
}
详解
1.main()函数第一句
printf(%d\n, Add(4, 2, 3, 4, 5));
第一个4表示元素个数剩余表示元素内容
2.
操作符的含义:
1. va_list arg;
宏操作符实际含义详解va_listchar *va_list arg 创建一个字符指针arg用于访问参数列表的未确定部分。
2. va_start(arg, num); (ap(va_list)v _INTSIZEOF(v))
宏操作符实际含义详解va_start (ap,v)(ap(va_list)v _INTSIZEOF(v))初始化变量arg ,va_start有两个参数它的第一个参数是va_list所创建的字符指针。第2个参数是“…”之前的那个参数不可以读省略号va_start (arg,num)(arg(char *)v _INTSIZEOF(num))_INTSIZEOF(sizeof(n) sizeof(int)-1 ~(sizeof(int)-1)跳过num来到位置参数的第一个参数。向上取四的整数倍
3. for (int i 0; i num; i){sum va_arg(arg, int);}
宏操作符实际含义详解va_arg(ap,t) (*(t*)((ap _INTSIZEOF(t)) - _INTSIZEOF(t)))(*(t*)((arg _INTSIZEOF(int)) - _INTSIZEOF(int))) (*(t*)((arg _INTSIZEOF(int)) - _INTSIZEOF(int)))(*(int *)((arg 4) - 4))(arg 4) - 4)arg; arg4;先给arg加4再减arg这次产生的结果没变但是arg指向了下一个位置。一个代码做了两个动作 for (int i 0; i num; i){sum va_arg(arg, int);}
取出所有未知参数然后加给sum
宏操作符实际含义详解va_end(ap)(ap (va_list)0)给指针赋值空指针。不用的时候释放
va_end(arg);
防止指针乱指用完一定要释放。