1. 程式人生 > >第5-6章

第5-6章

練習5.25

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<fstream>
using std::ifstream;

#include<string>
using std::string;

#include<vector>
using std::vector;
//#include<stdexcept>
using std::runtime_error;
int main() {
	int i1, i2;
	while (cin >> i1 >> i2)
	{
		try
		{	
			if (i2 == 0)
				throw runtime_error("division can't be zero!");
			cout << i1 / i2 << endl;
		}
		catch (runtime_error err) {
			cout << err.what()
				<< "\ntry again?y or n" << endl;
			char c;
			cin >> c;
			if (!cin || c == 'n')
				break;
		}

	}

練習6.23

#include<iostream>
using std::cin;
using std::cout;
using std::endl;

#include<string>
using std::string;

#include<vector>
using std::vector;
//#include<stdexcept>
using std::runtime_error;
using std::begin;
using std::end;


void print(int i) {
	cout << i << endl;
}

void print(const int *ia,const int size) {
	for (int i = 0; i != size; ++i)
		cout << ia[i] << endl;
}

void print(const int *beg, const int *end) {
	while (beg != end)
		cout << *beg++ << endl;
}

int main() {
	int i = 0, j[2]{ 1,2 };

	print(i);

	print(j, begin(j)-end(j));

	print(begin(j), end(j));

	system("pause");
}

練習6.32

先明確幾個點

引數傳遞:   每次呼叫函式時都會重新建立它的形參,並用傳入的實參對形參進行初始化.

什麼意思呢,比如 形參是 int i   int &i    傳入的是j

那就是int i =j ;    int &i = j;

形參不管是引用還好,還是普通的型別 都是這個過程

而返回一個值 (不管是返回一個普通的型別 還是一個引用)  的方式和初始化一個變數或形參的方式完全一樣: 返回值用於初始化呼叫點的一個臨時量,該臨時量就是函式呼叫的結果

比如  一個函式

(1)  int f1(int i)

     {return i} 

(2)   int &f2(int i)

       {int &j = i;return j }

我們呼叫(1):

int  i = 2;

 int j = f1(i);         

這裡發生了什麼呢?   就是  int tmp = i ;  int j = tmp;

ok   再來看  呼叫 (2)

int & k = f2(i) ;

理想的情況是  int & tmp = j ;   實際是 int &tmp = i    (a)  

int & k  = tmp;  

 但是  i是區域性變數 (跟全域性變數i不是一個i   這個i是f2呼叫時,生成的形參i ) 它在  (a) 步完成之後就被釋放掉

所以這個是錯的

再來看 練習6.32的題,   它返回的是arry[index]   這個實際是arry指向的陣列的第index元素的引用   實際就可以把它看成 *(arry+index)    因為使用引用的型別的物件   就可以把它看成它引用的物件

 arry是一個指標  它跟全域性變數 比如 list     指的是同一個記憶體地址  當然跟list 不是一個物件,arry在函式完成之後被清空了,但arry指向的陣列沒有被釋放掉  因為全域性變數 list 也指那個地方    那第index元素自然也沒被釋放掉

所以是對的