做电影网站赚了几百万,国内wordpress博客,linux网站架构,做电商网站需要花费多少钱函数的默认实参
函数默认参数#xff1a;函数的形参可以有默认值#xff0c;如果我们自己传入参数#xff0c;就用自己的数据#xff0c;如果没有#xff0c;那么用默认值
特别注意*#xff1a; 如果某个位置有了默认参数#xff0c;那么从这个位置往后#xff0c;必…函数的默认实参
函数默认参数函数的形参可以有默认值如果我们自己传入参数就用自己的数据如果没有那么用默认值
特别注意* 如果某个位置有了默认参数那么从这个位置往后必须要有默认值即默认参数要放在最后
知识扩展*:当我们调用有默认参数的函数时可以不写实参
func(int a,int b100);
不能写成
func(int a,int b200,int c)
func(int a,int b100)
这里b的引用不能赋值为199因为引用本质上就是简化版的指针
不定量参数
1.将cmd发送快捷方式到桌面
2.修改文件起始位置为工程目录 这样我们就能直接在这个控制台运行我们写好的程序、 知识扩展*修改生成文件名 afei
右键工程-属性-常规-目标文件名
main函数的另一面
int main(int argcountchar* c_arg[])
argcount表示参数个数c_arg[]表示储存的参数
c_arg[0]储存的一定是文件名
c_arg[]最后储存的一定是空指针为什么是空指针呢因为它储存的参数本质上就是储存的字符串格式只是以空格分开
接受不定量参数的函数
int func(int count ,...) 参数后面跟的是省略号
使用这函数要加头文件cstdarg
如何获取参数
va_list arg 定义一个指针。也可以写成char* argva_list就是一个char*
va_start(argcount) 得到参数的地址
va_arg(argint) 读取参数返回参数的值每调用一次就会返回一个参数然后跳到下一个参数这里的int是指参数的类型当然参数可以传递一个float进去只要va_arg能够读取就行。
va_end(arg) 释放arg的内存
int func(int count,...)
{int sum {};char* arg {};va_start (arg,count);for(int i0;icount;i){sumva_arg(arg,int);}va_end(arg)
}
int main()
{int xfunc(5,1,2,3,4,5);std::coutx;
}
这里输出了15
arg底层实现
既然用到了指针肯定利用到了偏移读取每个元素我们打印出va_start里的指针值再打印出每一次va_arg的指针值发现是第一次的值和va_start的值是一样的而之后的每次值都相差4说明这个函数把参数放到了一起然后通过int4个自己的偏移量来读取每个值
自己实现不定量参数
struct Sarg
{int count;char* ptr;
};
int add(Sarg a)
{int sum 0;int* fp (int*)a.ptr;for(int i0;ia.count;i){sum fp[i]; }return sum;
};
int main()
{Sarg a;a.count 5;a.ptr (char*)new int[5]{ 1,2,3,4,5 };std::cout add(a);system(pause);
}
第20行必须要转成char*才能赋值所以第九行又要把它赚回来add参数为引用是为了节省内存