第六章习题- C++ primer 笔记

本文展示了C++编程中的一些关键概念,包括计数函数`count_calls`的实现,检查空指针的安全函数`q6_21`,交换指针变量的函数`q6_22`及其测试,使用`initializer_list`求和的函数`q6_37`,以及递归实现阶乘的函数`factorial`。同时,讨论了预增量、后增量和前增量操作符的区别,并给出了代码示例。
摘要由CSDN通过智能技术生成

第六章习题

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();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值