第六章習題
size_t q6_7count_calls()
{
static size_t ctr = 0;
if (ctr < 1)
{
++ctr;
return 0;
}
else
{
++ctr;
return 1;
}
}
int q6_21(int x1, int *x2)
{
if (x2 == nullptr)
{
cerr << "傳入空指針!" << endl;
return -1;
}
if (x1 > *x2)
{
return x1;
}
else
{
return *x2;
}
}
void q6_22(int *&ip1, int *&ip2)
{
int *temp = nullptr;
temp = ip1;
ip1 = ip2;
ip2 = temp;
}
void q6_22_test()
{
int i = 1;
int j = 2;
int *p1 = &i;
int *p2 = &j;
cout << "p1:" << p1 << endl;
cout << "p2:" << p2 << endl;
cout << "*p1:" << *p1 << endl;
cout << "*p2:" << *p2 << endl;
q6_22(p1, p2);
cout << "p1:" << p1 << endl;
cout << "p2:" << p2 << endl;
cout << "*p1:" << *p1 << endl;
cout << "*p2:" << *p2 << endl;
}
int q6_27(initializer_list<int> lis)
{
int sum = 0;
if (lis.size()==0)
{
return 0;
}
for (const auto &i :lis)
{
sum += i;
}
return sum;
}
void q6_27_test()
{
cout << q6_27({ 1,2,3 }) << endl;
cout << q6_27({}) << endl;
}
int & get1(int *arry, int index) { return arry[index]; }
void q_32()
{
int ia[10];
for (size_t i = 0; i !=10; i++)
{
get1(ia, i) = i;//等價下面兩句,給數組指派
//int &get2 = ia[i];
//get2 = i;
}
}
void q6_33(vector<int>::iterator beg, vector<int>::iterator end)
{
if (beg != end)
{
cout << *beg << endl;
q6_33(std::next(beg), end);
}
}
void q6_33_test()
{
vector<int> vi(10, 1);
q6_33(vi.begin(), vi.end());
}
//6.34
//if(val > 1) 執行到2停止
//if(val != 1) 執行到1停止
6.35
int factorial(int val)
{
if (val > 1)
return factorial(val--)*val;
return 1;
}
void q6_35_test()
{
cout << factorial(5);
}
int main()
{
q6_35_test();
getchar();
return 0;
}
val -1 ,可以看到val的值在遞減。

val --,可以看到val的值一直是5,val先傳值,再減一
–val,可以看到val的值在遞減,val先減一,再傳值。
6.36
string (*q6_36())[10]{}
string(&q6_36_())[10]{}
6.37
//易于了解
using arrt = string[10];
arrt* q6_37_1();
//寫一起 友善閱讀
auto q6_37_2()->string(*)[10];
//易于了解 *号容易忘記
string odd[] = { "a","v","d" };
decltype(odd) *q6_37_3();