编写一个动态参数的函数,使函数能够适应不同的参数个数。
思路:利用函数的省略参数,功能实现依赖于几个stdarg.h中定义的宏:
1、 va_list:行为有点像数据类型,定义一个参数列表
2、 va_start:行为有点像函数,参数为va_list类型的参数列表以及参数个数
3、 va_arg:行为像函数,参数为va_list参数表以及参数数据类型,返回对应类型的参数值。
4、 va_end:行为像函数,参数为va_list的参数表函数功能:接收不同个数和类型的参数,,当然参数给的规律还是需要约定好的,这里约定每组一个字符串类型和整型,供N组。
#include
#include
void arameter(int num, ...) {
va_list arg_list;
va_start(arg_list,num); //读取所有参数数据
while (num--) {
char* arg_string = va_arg(arg_list, char*);
int arg_int = va_arg(arg_list,int);
//float arg_float = va_arg(arg_list, float);
cout << arg_string << '\t' << arg_int << '\t' << endl;
}
va_end(arg_list);
}
arameter(2, "world", 5,"hello",4);
编写一个函数,利用指针作为参数,实现两个数的互换。
#include
void swap(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int x = 10, y = 20;
cout << "互换前的x为" << x << ",y为:" << y << endl;
swap(&x, &y);
cout << "互换前的x为" << x << ",y为:" << y << endl;
用C++语言编写一个递归函数,遍历指定目录下的所有文件。
选需要了解文件查找的相关信息,这样才能理解下面的代码。
#include
#include
#include
void ListDir(const char* pchData)
{
_finddata_t fdata; //定义存储文件信息的结构体
char tempdir[MAXLEN] = { 0 };
strcat(tempdir, pchData);
strcat(tempdir, "\\*");
long done = _findfirst(tempdir, &fdata);//充当手柄
if (done != -1)
{
int ret = 0;
while (ret != -1) //直到_findnext返回-1为止,即已经到达最后一个文件位置
{
if (fdata.attrib != _A_SUBDIR) //不是文件夹,即文件,就输出文件名,文件数量加1
{
if (strcmp(fdata.name, "...") != 0 &&
strcmp(fdata.name, "..") != 0 && //..表示上一级目录
strcmp(fdata.name, ".") != 0) //.表示当前目录
{
char dir[MAXLEN] = "";
strcat(dir, pchData);
strcat(dir, "\\");
strcat(dir, fdata.name);
printf("%s\n", dir);
filenum++;
}
}
ret = _findnext(done, &fdata);
if (fdata.attrib == _A_SUBDIR && ret != -1) //是文件夹(目录),就递归
{
if (strcmp(fdata.name, "...") != 0 &&
strcmp(fdata.name, "..") != 0 &&
strcmp(fdata.name, ".") != 0)
{
char pdir[MAXLEN] ="";//{ 0 }
strcat(pdir, pchData);
strcat(pdir, "\\");
strcat(pdir, fdata.name);
ListDir(pdir);
}
}
}
}
}
filenum = 0;
ListDir("D:\\Pyvirtual\\Test\\Include");
printf("共计%d个文件\n", filenum);
编写一个函数模板,实现对各种数据类型数组进行从小到大的排序。
#include
template <class type,int len>
void any_bubble(type intlist[len]) {
type temp;
int i, j;
for (i = 1; i < len; i++) {
for (j = 0; j < len - i; j++) {
temp = intlist[j];
if (intlist[j] > intlist[j + 1]) {
intlist[j] = intlist[j + 1];
intlist[j + 1] = temp;
}
}
}
}
int arr_i[10] = { 1,8,5,6,7,2,3,10,11,12 };
any_bubble<int,10>(arr_i);
for (int i = 0; i < 10; i++) cout << arr_i[i] << " ";
float arr_f[10] = { 5.1,3.8,2.5,6.9,4.7,8.2,10.3,10.9,9.1,12.9 };
any_bubble<float,10>(arr_f);
cout << endl;
for (int i = 0; i < 10; i++)
cout << arr_f[i] << " ";