博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六章 6.2.1节练习 & 6.2.2节练习
阅读量:2421 次
发布时间:2019-05-10

本文共 1199 字,大约阅读时间需要 3 分钟。

练习6.10

编写一个函数,使用指针形参交换两个整数的值。在代码中调用该函数并输出交换后的记过,以此验证函数的正确性。

解答:

#include 
using namespace std;void swap(int *a, int *b){ int *p = a; *a = *b; *b = *p;}int main(){ int a = 10, b = 20; swap(a, b); cout << a << endl; cout << b << endl; return 0;}
练习6.11

编写并验证你自己的reset函数,使其作用于引用类型的参数。

解答:

这个参照书中的实现。

练习6.12

改写6.2.1节中练习6.10的程序,使用引用而非指针交换两个整数的值。你觉得那种方法更易于使用呢?为什么?

解答:

#include 
using namespace std;void swap(int &a, int &b){ int p = a; a = b; b = p;}int main(){ int a = 10, b = 20; swap(a, b); cout << a << endl; cout << b << endl; return 0;}
引用更容易理解一些。

指针需要做拷贝,而且指针用不好可能会带来很多奇怪的问题。

练习6.13

假设T是某种类型的名字,说明以下两个函数声明的区别:一个是void f(T), 另一个是void f(&T).

解答:

返回值类型不同,一个是void,一个是void*。

一个参数是拷贝传参,一个是引用传参。

练习6.14

举一个形参应该是引用的例子,再举一个形参不能是引用的例子。

解答:

这里就不写了。

这里用到引用的话,首先是为了效率,这样不会再去开辟新的内存空间去存储拷贝;

其次,还是为了方便直接对参数数值进行修改。

这个不能是引用的例子还真没想到…… 

练习6.15

说明find_char函数中的三个形参为什么是现在的类型,特别说明为什么s是常量引用而occurs是普通引用?为什么s和occurs是引用类型而c不是?如果令s是普通引用会发生什么情况?如果令occurs是常量引用会发生什么情况

解答:

(1)这里我们希望对occurs进行计数,也就是对其要进行修改。同时,这里我们不希望s在函数调用过程中有任何的变化,所以两个引用的类型不一样。

(2)这里c可以是const char&类型的引用。可能因为char的内存占用比较小,所以这里没有对其进行引用传递。

(3)可能会在函数调用过程中被修改,与我们之前的字符串不相同。

(4)无法进行计数,常量引用的话就无法进行写入。

同样的,常量引用的设置也是一种警告机制,通过编译错误信息来警告程序员,有不必要的修改在某个函数里面。

转载地址:http://uwqlb.baihongyu.com/

你可能感兴趣的文章
如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
查看>>
【C语言】C语言中常用函数源代码【strncpy ,strncat ,strncmp】
查看>>
【Java】【算法练习】题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是输出yes,不是输出no,数组任意两个数字不相同。
查看>>
【Java】给定一个二叉树和其中的一个节点,请找出中序遍历的下一个节点且返回, 注意:树中的节点不仅包含左右子节点,同时包含父节点的指针。
查看>>
【Java】【多线程】—— 多线程篇
查看>>
【计算机网络】—— TCP/IP篇
查看>>
【Java】【算法】——算法篇
查看>>
【Java】【数据库】知识重点——数据库篇
查看>>
【Java】知识重点——消息队列篇
查看>>
【Java】学习总结 —— HashMap之put()方法实现原理
查看>>
【计算机网络】【TCP】如何讲清楚Tcp的三次握手和四次挥手?
查看>>
【Java】-- Java核心知识点总结
查看>>
【数据库】SQL之重点知识点总结
查看>>
【计算机网络】计算机网络知识总结
查看>>
【Java】【Web】JavaWeb相关知识总结 2018-9-17
查看>>
【数据库】突破单一数据库的性能限制——数据库-分库分表总结 2018-9-20
查看>>
交换机和路由器的区别
查看>>
不让失败缚住手脚
查看>>
IT起步晚 有缘由
查看>>
项目推动 考核挂帅
查看>>