第六章 6.2.1节练习 & 6.2.2节练习

练习6.10

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

解答:

#include <iostream>

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 <iostream>

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)无法进行计数,常量引用的话就无法进行写入。

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值