c++课件方案.ppt

c课件方案

调用swap函数的参数是x和y,调用时传入变量,实际上传递的是地址。 0xFF00 0xFF04 1 2 rx ry X 0xFF00 y 0xFF04 tmp 引用的问题:可能误导程序员,在程序员没有看到函数原型之前,可能会认为不能通过函数调用修改传入的参数,但是如果是引用传参,这是可能的。 另一方面,同时有传值和传引用会导致ambiguous call to overloaded function。 引用返回值 float temp ; float fn1(float r) { temp = r*r*3.14f ; return temp ; } float fn2(float r) { temp = r*r*3.14f ; return temp ; } void main() { float a = fn1(5.0f) ; float b = fn1(5.0f) ;//error float c = fn2(5.0f) ; float d = fn2(5.0f) ; coutaendl ; coutbendl ; coutcendl ; coutdendl ; } 第一种情况 5.0 78.5 78.5 78.5 stack data Fn1() r 临时变量 a temp 第二种情况 5.0 78.5 0XFF00 78.5 stack data Fn1() r 临时变量:0xFF00 b temp 危险 第三种情况 5.0 0xFF00 78.5 78.5 stack data Fn2() r 临时变量 c Temp 0XFF00 第四种情况 5.0 0xAA00 0xAA00 78.5 stack data Fn2() r 临时变量 d temp 0xAA00 如果temp不是一个全局变量呢? const限定引用 当一个数据类型很大时,传值效率太低,传指针和传引用都是为了提高效率。 传指针和传引用的问题:可能有被传递的数据被修改的情况。 保护实参不被修改的方法是传递const指针和引用。 内联函数 函数调用会增加时间开销,尤其对于那些经常使用的小函数。为此,C++语言提供了内联函数来减少函数调用的开销。当在一个函数的定义或声明前加上关键字inline,则就可以把该函数定义为内联函数。若把一个函数定义为内联函数后,在程序编译阶段,编译器就会把每次调用该函数的地方都直接替换为该函数体中的代码,由此省去了函数的调用及相应的保存断点、参数传递和返回等操作,从而加快整个程序的执行速度。 inline float triangleArea(float a,float b,float c) { float s,area; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); return (area); } double fn(const double pd) { double ad = 32 ; ad +=pd ; pd = pd + 2 ; //error return ad ; } void main() { cout fn(0.2) ; } Inline的限制 含有复杂的分支或循环结构 递归调用 密码:jk070103,jk070406 整行输入字符串 cin.getline(字符数组名St,字符个数N,结束符); 功能:一次连续读入多个字符(可以包括空格),直到读满N个,或遇到指定的结束符(默认为‘\n’)。读入的字符串存放于字符数组St中。读取但不存储结束符。 cin.getline(a,40,\n) ; cin.get(字符数组名St,字符个数N,结束符); 功能:一次连续读入多个字符(可以包括空格),直到读满N个,或遇到指定的结束符(默认为\n)。读入的字符串存放于字符数组St中。 既不读取也不存储结束符。 整行输入字符串举例 #include iostream using namespace std; void main (void) { char city[80]; char state[80]; int i; for (i = 0; i 2; i++) { cin.getline(city,80,,); cin.getline(state,80,\n); coutCity: city State: stateendl; } } 运行结果 Beijing,China City: Beijing Country: China Shanghai,China City: Shanghai Country: China 字符串处理函数 strcat(连接),strcpy(复制), s

文档评论(0)

1亿VIP精品文档

相关文档