练习6.30:编译第200页的str_subrange函数,看看你的编译器是如何处理函数中的错误的。
答: E:\C++ Primer 第五版 练习和解答\第六章 函数\习题程序\练习6.30.cpp [Error] return-statement with no value, in function returning ‘bool’ [-fpermissive]
练习6.31:什么情况下返回的引用无效?什么情况下返回常量的引用无效?
答:函数终止意味着局部变量的引用将指向不再有效的内存区域。
返回常量的引用无效:在函数内部对常量引用做类似赋值拷贝等动作
练习6.32:下面的函数合法吗?如果合法,说明其功能;如果不合法,修改其中的错误并解释原因。
int &get(int *arry, int index){return arry[index];}
int main()
{
int ia[10];
for (int i = 0; i != 10; ++i)
get(ia, i) = i;
}
答:错误 int *arry 在函数内部定义,返回局部对象的指针也是错误的。一旦函数完成,局部对象被释放,指针将指向一个不存在的对象。
练习6.33:编写一个递归函数,输出vector对象的内容。
答:见云盘程序
练习6.34:如果factorial函数的停止条件如下所示,将发生什么情况?
if(val != 0)
答:最后运算的结果为0,因为val == 0,函数停止
练习6.35:在调用factorial函数时,为什么我们传入的值是val – 1而非 val–?
答:假设 val = 3;
Int j = val -1 ; //此时j = 3-1 =2
Int j= val–;//则 j等于3,即j等于val的当前值,val再进行减1操作,结果不对。
练习6.33
/*
*练习6.33
*2015/6/17
*问题描述:练习6.33:编写一个递归函数,输出vector对象的内容。
*功能:递归打印
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int> ivec, vector<int>::size_type j)
{
if (j != ivec.size()-1 )
print(ivec , j+1);
cout << ivec[j] << endl;
}
int main()
{
int val;
vector<int> ivec;
while (cin >> val)
ivec.push_back(val);
print(ivec,0);
return 0;
}