当前位置: 首页 > news >正文

【C++初阶】缺省参数(默认参数)详细讲解

文章目录前言一、核心概念二、缺省参数的两大分类1. 全缺省参数2. 半缺省参数三、缺省参数 4 条硬性规则重点规则 1半缺省必须「从右往左、连续」缺省规则 2调用时实参必须「从左往右、依次」传参规则 3声明与定义分离 → 缺省值只写在声明中规则 4缺省值只能是「常量 / 全局变量」四、缺省参数的实际应用场景总结前言缺省参数有些地方也叫默认参数是 C 在 C 语言基础上新增的核心语法特性能让函数调用更灵活、代码更简洁。一、核心概念缺省参数在声明或定义函数时为函数的形参指定一个默认值。调用函数时遵循两个规则传入实参 → 使用传入的实参未传入实参 → 使用参数的默认值。简单理解调用函数时没传的参数自动用预设的默认值补上。二、缺省参数的两大分类根据参数是否全部指定默认值分为全缺省参数和半缺省参数。1. 全缺省参数函数的所有形参都设置默认值调用时可以不传参、传部分参、传全部参。#includeiostreamusingnamespacestd;// 全缺省所有参数都有默认值voidFunc1(inta10,intb20,intc30){couta aendl;coutb bendl;coutc cendlendl;}intmain(){Func1();// 不传参全部用默认值 a10,b20,c30Func1(1);// 传1个参a1,b20,c30Func1(1,2);// 传2个参a1,b2,c30Func1(1,2,3);// 传3个参全部用实参 a1,b2,c3return0;}2. 半缺省参数函数的部分形参设置默认值必须从右往左连续指定不能间隔、不能从左往右缺。#includeiostreamusingnamespacestd;// 半缺省从右往左连续缺省a无默认b、c有默认voidFunc2(inta,intb10,intc20){couta aendl;coutb bendl;coutc cendlendl;}intmain(){Func2(100);// 只传ab10、c20默认值Func2(100,200);// 传a、bc20默认值Func2(100,200,300);// 传全部参数return0;}禁止的半缺省写法编译报错// 错误1从左往右缺违反连续规则voidFunc(inta10,intb20,intc){}// 错误2间隔缺省不连续voidFunc(inta10,intb,intc20){}三、缺省参数 4 条硬性规则重点违反以下规则会直接导致编译报错规则 1半缺省必须「从右往左、连续」缺省只能从最右侧参数开始向左依次设置默认值不能跳跃、不能从左开始。规则 2调用时实参必须「从左往右、依次」传参调用函数时不能跳跃传参必须从第一个参数开始依次传入。Func1(,2,3);// 错误不能跳过第一个参数规则 3声明与定义分离 → 缺省值只写在声明中工程开发中函数声明在头文件、定义在源文件缺省值只能出现在声明里定义不能重复写。// Stack.h 声明文件typedefintSTDataType;typedefstructStack{STDataType*a;inttop;intcapacity;}ST;// 缺省值仅在声明中指定voidSTInit(ST*ps,intn4);// Stack.cpp 定义文件#includeStack.h// 定义中不能再写缺省值voidSTInit(ST*ps,intn){assert(psn0);ps-a(STDataType*)malloc(n*sizeof(STDataType));ps-top0;ps-capacityn;}规则 4缺省值只能是「常量 / 全局变量」不能用局部变量作为缺省参数局部变量运行时才创建函数声明在编译期确定。四、缺省参数的实际应用场景本文章采用栈初始化的案例体现缺省参数的实用性不知道数据量 → 用默认值4无需手动指定知道数据量很大 → 手动传参一次性开辟空间避免后续频繁扩容。频繁扩容会造成的影响内存使用频繁的扩容会导致大量的内存分配和回收这会降低程序的性能。停顿时间在数组扩容的过程中程序可能会出现短暂的停顿时间影响程序的效率。// Stack.h 声明文件typedefintSTDataType;typedefstructStack{STDataType*a;inttop;intcapacity;}ST;voidSTInit(ST*ps,intn4);voidSTPush(ST*ps,STDataType x);// Stack.cpp 定义文件#includeStack.hvoidSTInit(ST*ps,intn){assert(psn0);ps-a(STDataType*)malloc(n*sizeof(STDataType));ps-top0;ps-capacityn;}voidSTPush(ST*ps,STDataType x){assert(ps);// 满了 扩容if(ps-topps-capacity){printf(扩容\n);intnewcapacityps-capacity0?4:ps-capacity*2;STDataType*tmp(STDataType*)realloc(ps-a,newcapacity*sizeof(STDataType));if(tmpNULL){perror(realloc fail);return;}ps-atmp;ps-capacitynewcapacity;}ps-a[ps-top]x;ps-top;}}// test.cpp#includeStack.hintmain(){ST s1;STInit(s1);// 不传参默认开4个空间适合小数据// 知道要插入1000个数据可以初始化就开好避免频繁扩容ST s2;STInit(s2,1000);// 传参直接开1000空间无扩容损耗for(size_t i0;i1000;i){STPush(st2,i);}return0;}总结本文主要针对C的缺省参数进行解析方便更好地理解和学习。
http://www.rkmt.cn/news/1378975.html

相关文章:

  • # 机器学习经典算法:支持向量机 (SVM) —— AI 界的“最强分割线”全景解析
  • 5个步骤轻松安装大气层系统:完整Nintendo Switch破解指南
  • 三大探索路径重塑音乐数字主权:解锁浏览器中的音频格式革命
  • ACM周报9
  • 三方物流平台-及时配送需求客户全生命周期详解
  • 打破壁垒:Windows 10分钟快速访问Linux RAID存储的终极方案
  • Steam创意工坊下载神器:WorkshopDL让你轻松获取海量游戏模组
  • 创意惊喜礼物|专属表白网页定制(限时199元) 2026年
  • 洛谷-【动态规划1】动态规划的引入4
  • Noto字体:全球文字系统统一渲染的技术架构与实践指南
  • SciDownl:3步终极指南,快速免费下载SciHub学术文献的完整解决方案
  • 开源手术革命:OpenCLAW微创手术器械深度解析
  • m4s-converter:3步轻松备份你的B站收藏,让精彩视频永不消失
  • 关灯生产、无人值守不是科幻!吃透这两套技术,普通工厂也能落地黑灯智造
  • 淮北6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 衢州6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 阜阳6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 闲置电视盒子的硬件重生:3步将安卓系统改造为全能Armbian服务器
  • 48Tools终极指南:一站式多平台直播录制与视频下载工具
  • C语言顺序结构的二叉树之堆排序
  • c++中std::tuple、std::pair 、std::tie使用详解
  • 离心风机进风量与噪音平衡的结构设计方案:从声源抑制到系统级协同优化
  • DFT笔记60
  • 铜陵6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • 3分钟学会:如何在浏览器中零服务器依赖将HTML转为Word文档
  • 打造高效的技术学习环境:我的C#与C++跨语言混合编程实践之路
  • 5分钟快速部署i茅台自动化预约系统:免费开源的全能解决方案
  • 2026财务分析师如何提升自身专业能力:从财务建模到AI数据分析的进阶路线
  • 2026产品经理如何全面提升业务能力:关键步骤与成长路径
  • Unity ARCore开发避坑指南:从配置雷区到工业级AR落地