理论讲解请参考:C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记


目录

6.10 指针形参交换两个数

6.12 引用形参交换两个数

6.13

6.14

6.15

6.16

6.17

6.18

6.19

6.20

6.21

6.22

6.24

6.25

6.27


6.10 指针形参交换两个数

# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(int *v1,int *v2)
{int i = 0;int * temp = &i;*temp = *v1;*v1 = *v2;*v2 = *temp;
}int main()
{int m = 6;int n = 9;cout << "m: " << m << "  n: " << n << endl;fun(&m, &n);   //这里调用,参数是地址,因为形参是指针,区别于形参是引用cout << "交换后的值为:" << endl;cout << "m: " << m << "  n: " << n << endl;return 0;
}

运行结果:


6.12 引用形参交换两个数

# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(int &v1,int &v2)
{int i = 0;int &temp = i;temp = v1;v1 = v2;v2 = temp;
}int main()
{int m = 6;int n = 9;cout << "m: " << m << "  n: " << n << endl;fun(m, n);   //这里参数只需对象就行,不需要地址cout << "交换后的值为:" << endl;cout << "m: " << m << "  n: " << n << endl;return 0;
}

运行结果:


6.13

(1)f(T)是值传递,不能改变实参的值

(2)f(&T)是引用传递,相当于实参的另一个名字,可以改变实参的值


6.14

如果在程序中需要被修改,则需要声明为引用类型


6.15

s:在执行函数期间,s值不会被改变

occurs:occurs值需要被改变

c:是一个临时变量,所以不需要使用引用类型

如果令occurs为常量引用,则输出occurs为0(不能加以修改),

如果s生命为普通引用可能会在程序中被修改


6.16

细节:尽量使用常量引用

应定义s为常量引用:const string& s


6.17

第一个只需判断是否含有大写字母,没有涉及到改变值,所以形参定义为常量引用

第二个需要更改值,所以形参为普通引用

判断是否有大写字母(形参为常量引用):

# include <iostream>
# include <string>
# include <vector>
using namespace std;// 形参常量引用
void fun(const string& str)
{for (int i = 0; i != str.size(); ++i){if (str[i] >= 'A' && str[i] <= 'Z')   //判断是否存在大写字母cout << "存在大写字母!" << endl;elsecout << "不存在大学字母!" << endl;}
}int main()
{cout << "Please enter strings:";string tr;cin >> tr;fun(tr);return 0;
}

将大写字母改为小写(形参为普通引用):

知识点:将大写字母改为小写,则是加32。如果将小写改为大写,则是减32。

# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(string& str)
{for (int i = 0; i != str.size(); ++i){if (str[i] >= 'A' && str[i] <= 'Z')  // 判断是否大写str[i] += 32;  //加32改为小写}
}int main()
{cout << "Please enter strings:";string tr;cin >> tr;fun(tr);for (int i = 0; i != tr.size(); ++i)cout << tr[i];cout << endl;return 0;
}

引申一下,将字符串小写改为大写大写改为小写:

# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(string& str)
{for (int i = 0; i != str.size(); ++i){if (str[i] >= 'A' && str[i] <= 'Z')  // 判断是否大写str[i] += 32;  //加32改为小写elsestr[i] -= 32;  //键32改为大写}
}int main()
{cout << "Please enter strings:";string tr;cin >> tr;fun(tr);for (int i = 0; i != tr.size(); ++i)cout << tr[i];cout << endl;return 0;
}

6.18

(a)

//功能可能是比较两个matrix的大小
bool compare(const matrix &m1, const matrix &m2) {  /.../   }

(b)

vector<int>::iterator change_val(int, vector<int>::iterator) { /.../ }

6.19

(a):不合法,函数只有一个参数

(b):合法

(c):合法

(d):合法


6.20

函数不改变形参值时应该是常量引用。

如果将应该是常量引用设置为普通引用,则可能会修改其指造成错误


6.21

# include <iostream>
# include <string>
# include <vector>
using namespace std;int fun(int v1, const int *cp)
{int max=v1;if (v1 < *cp)max = *cp;return max;
}int main()
{int n1, n2;cout << "Please enter two numbers: " << endl;cin >> n1 >> n2;int *p = &n2;int Max=fun(n1,p);cout <<"较大值为: " << Max<<endl;return 0;
}

6.22

# include <iostream>
# include <string>
# include <vector>
using namespace std;int fun( int *cp1,  int *cp2)
{int m = 0;int *Temp=&m;*Temp = *cp1;*cp1 = *cp2;*cp2 = *Temp;return 0;
}int main()
{int n1, n2;cout << "Please enter two numbers: " << endl;cin >> n1 >> n2;int *p1 = &n1;int *p2 = &n2;cout << "交换前的值为:" << *p1 << ' ' << *p2 << endl;fun(p1,p2);cout <<"交换后的值为:" << *p1<<' '<< *p2<<endl;return 0;
}

6.24

此题以值传递数组,是错误的。可以用下边方法传递,数组的引用:

void print(const int (&ia)[10])   {/*...*/}

6.25

#include <iostream>
#include <string>int main(int argc, char** argv)//实参列表
{string str;for (int i = 1; i != argc; ++i) {str += argv[i];   //因为argv是从1开始,不是从0开始str += " ";}cout << str <<endl;return 0;
}

6.27

#include <iostream>
#include <string>
#include <vector>
using namespace std;int fun(initializer_list<int> lst)
{int sum = 0;for (auto beg = lst.begin(); beg!= lst.end(); ++beg)sum+=*beg;return sum;
}
void main()
{int Sum = fun({ 3, 4, 5, 6, 7, 8, 9 });cout << Sum << endl;
}

C++ Primer 第五版 第6章 6.2——函数参数传递习题答案相关推荐

  1. C++ Primer 第五版 第6章 6.7——函数指针习题答案

    理论请参考:C++ Primer 第五版 第6章 6.7--函数指针阅读笔记 目录 6.7 函数指针习题答案 6.54 6.55 6.56 6.7 函数指针习题答案 6.54 vector是指向该函数 ...

  2. C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.2--函数参数传递习题答案 目录 6.2 函数参数传递 6.2.1 传值参数(值传递) 指针形参 6.2.2 传引用参数(引用传递) 使用引用 ...

  3. C++ Primer 第五版 第6章 6.7——函数指针阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.7--函数指针习题答案 目录 6.7 函数指针 使用函数指针 返回指向函数的指针 6.7 函数指针 声明一个函数指针,只需要用指针替代函数名即 ...

  4. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句习题答案 目录 6.3 返回类型和return语句 6.3.1 无返回值函数 无返回值函数的特性 6.3. ...

  5. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句阅读笔记 目录 6.31 6.32 6.33 6.34 6.35 6.36 6.38 6.31 返回引用无 ...

  6. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用阅读笔记 目录 目录 6.1 形参和实参的区别 6.2 函数语法考察 6.4 交互式输入数字,计算阶乘 6.5 输出实 ...

  7. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用习题答案 目录 6.1 函数基础 函数定义 函数调用 函数的形参和实参 函数的返回类型 局部静态对象 函数声明 头文件 ...

  8. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)

    C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...

  9. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案

    理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...

最新文章

  1. 前端面经笔记 2021.8.28
  2. 超越谷歌BERT!依图推出预训练语言理解模型ConvBERT,入选NeurIPS 2020
  3. 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通
  4. Linux目录结构FHS
  5. java求s a aa aaa_Java求s=a+aa+aaa+aaaa+aa...a的值
  6. mysql5.7.25my.ini_mysql5.7 没有my.ini 的解决办法
  7. eclipse 中自定义EL表达式时创建tld文件
  8. 计算机键盘打出来都是英语大写怎么办,电脑键盘上大小写怎么切换
  9. python四则运算器tkinter_Python基于Tkinter的二输入规则器(乞丐版)
  10. 音响上的英文是什么意思_鞋盒上的字母后缀 是什么意思?(上)
  11. oracle 混合分区表,Oracle 19C Hybrid partitioned tables混合分区表
  12. 计算机硬件设备建档,捷通科技RFID 文件柜档案管理硬件方案
  13. 汇编语言中xor指令_常用的汇编指令
  14. 电路图:LM3886 BTL功放电路图
  15. 嵌入式平台C语言实现二阶滤波器
  16. 计算机程序可以通过删除卸载嘛,怎么彻底卸载电脑软件程序多种方法
  17. 程序员如何通过兼职赚钱?有哪些渠道?
  18. 孤独的灵魂该去何处安家
  19. leetcode 相交链表 java
  20. sqlserver安装目录_SQL server2012安装图解及意外解决

热门文章

  1. matlab画直方图下标,matlab画二维数据直方图/画二维概率分布
  2. python爬虫教程视频成都工业学院-成都工业大学:Python爬虫和数据可视化实训课程(2020年3月新版)...
  3. ffmpeg 参数_使用FFMPEG进行视频转码
  4. java 高性能web_高性能WEB开发 - BearRui(AK-47) 的Blog - BlogJava
  5. ensp查看历史配置命令_网络工程师 | 手把手教你用华为ensp模拟器玩vxlan实验(静态方式)...
  6. iis服务器修改内存,修改IIS的虚拟内存
  7. LVS Nginx 负载均衡区别
  8. 人生聚散,一切随缘!
  9. C语言带参数的main()函数
  10. 2012年12月21日所谓世界末日时做的第一个五年规划——成为领域内的专家