建设通网站怎么注销,网站建设百度认证,小红书kol推广,wordpress批量修改链接C入门 三 1.缺省参数1.1 缺省参数概念1.2 缺省参数分类 2. 函数重载2.1 函数重载概念2.2 C支持函数重载的原理--名字修饰(name Mangling) 3.引用3.1引用概念3.2引用特性3.3 常引用3.4 使用场景1. 做参数2. 做返回值 3.5 传值、传引用效率比较3.6引用和指针的区别 4.引用和指针的… C入门 三 1.缺省参数1.1 缺省参数概念1.2 缺省参数分类 2. 函数重载2.1 函数重载概念2.2 C支持函数重载的原理--名字修饰(name Mangling) 3.引用3.1引用概念3.2引用特性3.3 常引用3.4 使用场景1. 做参数2. 做返回值 3.5 传值、传引用效率比较3.6引用和指针的区别 4.引用和指针的不同点总结 1.缺省参数
1.1 缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的缺省值否则使用指定的实参。
void Func(int a 0)
{coutaendl;
}
int main()
{Func(); // 没有传参时使用参数的默认值Func(10); // 传参时使用指定的实参
return 0;
}1.2 缺省参数分类
①全缺省参数
void Func(int a 10, int b 20, int c 30){couta aendl;coutb bendl;coutc cendl;}②半缺省参数
void Func(int a, int b 10, int c 20){couta aendl;coutb bendl;coutc cendl;}注意 1. 半缺省参数必须从右往左依次来给出不能间隔着给 2. 缺省参数不能在函数声明和定义中同时出现 //a.hvoid Func(int a 10);// a.cppvoid Func(int a 20){}// 注意如果生命与定义位置同时出现恰巧两个位置提供的值不同//那编译器就无法确定到底该用那个缺省值3. 缺省值必须是常量或者全局变量 4. C语言不支持编译器不支持 2. 函数重载
自然语言中一个词可以有多重含义人们可以通过上下文来判断该词真实的含义即该词被重载了。 比如以前有一个笑话国有两个体育项目大家根本不用看也不用担心。一个是乒乓球一个是男足。前者是“谁也赢不了”后者是“谁也赢不了 2.1 函数重载概念
函数重载 是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型不同的问题。
#includeiostream
using namespace std;// 1、参数类型不同
int Add(int left, int right)
{cout int Add(int left, int right) endl;return left right;
}
double Add(double left, double right)
{cout double Add(double left, double right) endl;return left right;
}// 2、参数个数不同
void f()
{cout f() endl;
}
void f(int a)
{cout f(int a) endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout f(int a,char b) endl;
}
void f(char b, int a)
{cout f(char b, int a) endl;
}
int main()
{Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, a);f(a, 10);return 0;
}
2.2 C支持函数重载的原理–名字修饰(name Mangling)
在C/C中一个程序要运行起来需要经历以下几个阶段预处理、编译、汇编、链接。 结论 1.通过这里就理解了C语言没办法支持重载因为同名函数没办法区分。而C是通过函数修饰规则来区分只要参数不同修饰出来的名字就不一样就支持了重载。 2. 如果两个函数函数名和参数是一样的返回值不同是不构成重载的因为调用时编译器没办法区分。 3.引用
3.1引用概念
引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空 间它和它引用的变量共用同一块内存空间。 比如李逵在家称为铁牛江湖上人称黑旋风。 类型 引用变量名(对象名) 引用实体
void TestRef()
{int a 10;int ra a;//定义引用类型printf(%p\n, a);printf(%p\n, ra);
}注意①引用类型必须和引用实体是同种类型的、 ② 引用必须进行初始化 3.2引用特性 引用在定义时必须初始化一个变量可以有多个引用引用一旦引用一个实体再不能引用其他实体 void TestRef()
{int a 10;// int ra; // 该条语句编译时会出错int ra a;int rra a;printf(%p %p %p\n, a, ra, rra);
}3.3 常引用
void TestConstRef()
{const int a 10;//int ra a; // 该语句编译时会出错a为常量const int ra a;// int b 10; // 该语句编译时会出错b为常量const int b 10;double d 12.34;//int rd d; // 该语句编译时会出错类型不同const int rd d;
}3.4 使用场景
1. 做参数
void Swap(int left, int right)
{int temp left;left right;right temp;
}2. 做返回值
int Count()
{static int n 0;n;// ...return n;
}注意如果函数返回时出了函数作用域如果返回对象还在(还没还给系统)则可以使用引用返回如果已经还给系统了则必须使用传值返回。 3.5 传值、传引用效率比较 以值作为参数或者返回值类型在传参和返回期间函数不会直接传递实参或者将变量本身直接返回而是传递实参或者返回变量的一份临时的拷贝因此用值作为参数或者返回值类型效率是非常低下的尤其是当参数或者返回值类型非常大时效率就更低。 一
#include time.h
struct A{ int a[10000]; };
void TestFunc1(A a){}
void TestFunc2(A a){}
void TestRefAndValue()
{A a;// 以值作为函数参数size_t begin1 clock();for (size_t i 0; i 10000; i)TestFunc1(a);size_t end1 clock();// 以引用作为函数参数size_t begin2 clock();for (size_t i 0; i 10000; i)TestFunc2(a);size_t end2 clock();
// 分别计算两个函数运行结束后的时间cout TestFunc1(A)-time: end1 - begin1 endl;cout TestFunc2(A)-time: end2 - begin2 endl;
}二
#include time.h
struct A{ int a[10000]; };
A a;
// 值返回
A TestFunc1() { return a;}
// 引用返回
A TestFunc2(){ return a;}
void TestReturnByRefOrValue()
{// 以值作为函数的返回值类型size_t begin1 clock();for (size_t i 0; i 100000; i)TestFunc1();size_t end1 clock();// 以引用作为函数的返回值类型size_t begin2 clock();for (size_t i 0; i 100000; i)TestFunc2();size_t end2 clock();// 计算两个函数运算完成之后的时间cout TestFunc1 time: end1 - begin1 endl;cout TestFunc2 time: end2 - begin2 endl;
}通过上述代码的比较发现传值和指针在作为传参以及返回值类型上效率相差很大。 3.6引用和指针的区别
在语法概念上引用就是一个别名没有独立空间和其引用实体共用同一块空间。
int main()
{
int a 10;
int ra a;
couta aendl;
coutra raendl;
return 0;
}在底层实现上实际是有空间的因为引用是按照指针方式来实现的。
int main()
{
int a 10;
int ra a;
ra 20;
int* pa a;
*pa 20;
return 0;
}我们来看下引用和指针的汇编代码对比: 4.引用和指针的不同点总结
引用概念上定义一个变量的别名指针存储一个变量地址。引用在定义时必须初始化指针没有要求引用在初始化时引用一个实体后就不能再引用其他实体而指针可以在任何时候指向任何一个同类型实体没有NULL引用但有NULL指针在sizeof中含义不同引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32位平台下占4个字节)引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小有多级指针但是没有多级引用访问实体方式不同指针需要显式解引用引用编译器自己处理引用比指针使用起来相对更安全 文章转载自: http://www.morning.krlsz.cn.gov.cn.krlsz.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.ppzgr.cn.gov.cn.ppzgr.cn http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn http://www.morning.ctqlq.cn.gov.cn.ctqlq.cn http://www.morning.lqpzb.cn.gov.cn.lqpzb.cn http://www.morning.rrgm.cn.gov.cn.rrgm.cn http://www.morning.ghlyy.cn.gov.cn.ghlyy.cn http://www.morning.hrnrx.cn.gov.cn.hrnrx.cn http://www.morning.fglxh.cn.gov.cn.fglxh.cn http://www.morning.kskpx.cn.gov.cn.kskpx.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.npfkw.cn.gov.cn.npfkw.cn http://www.morning.jglqn.cn.gov.cn.jglqn.cn http://www.morning.kdfqx.cn.gov.cn.kdfqx.cn http://www.morning.jtmql.cn.gov.cn.jtmql.cn http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.qtltg.cn.gov.cn.qtltg.cn http://www.morning.jljwk.cn.gov.cn.jljwk.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.fxjnn.cn.gov.cn.fxjnn.cn http://www.morning.bppml.cn.gov.cn.bppml.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.spdyl.cn.gov.cn.spdyl.cn http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.dqkcn.cn.gov.cn.dqkcn.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn http://www.morning.lhrcr.cn.gov.cn.lhrcr.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn http://www.morning.xfncq.cn.gov.cn.xfncq.cn http://www.morning.sjjtz.cn.gov.cn.sjjtz.cn http://www.morning.jpdbj.cn.gov.cn.jpdbj.cn http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn http://www.morning.zbtfz.cn.gov.cn.zbtfz.cn http://www.morning.kljhr.cn.gov.cn.kljhr.cn http://www.morning.nypgb.cn.gov.cn.nypgb.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn http://www.morning.tgcw.cn.gov.cn.tgcw.cn http://www.morning.yhxhq.cn.gov.cn.yhxhq.cn http://www.morning.jlktz.cn.gov.cn.jlktz.cn http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn http://www.morning.jxtbr.cn.gov.cn.jxtbr.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.tgcw.cn.gov.cn.tgcw.cn http://www.morning.pzrrq.cn.gov.cn.pzrrq.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.ggnfy.cn.gov.cn.ggnfy.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.jytrb.cn.gov.cn.jytrb.cn http://www.morning.xmjzn.cn.gov.cn.xmjzn.cn http://www.morning.sfswj.cn.gov.cn.sfswj.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn http://www.morning.gmyhq.cn.gov.cn.gmyhq.cn http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.nslwj.cn.gov.cn.nslwj.cn http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn http://www.morning.xdpjs.cn.gov.cn.xdpjs.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.bqpgq.cn.gov.cn.bqpgq.cn http://www.morning.jpbky.cn.gov.cn.jpbky.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.qbjgw.cn.gov.cn.qbjgw.cn