C++ Primer(第五版)4.9--4.11.3节练习

本文详细解析了C++ Primer第五版中4.28至4.38题的练习,涉及sizeof运算符、表达式优先级、递增操作、for循环、条件运算符、类型转换和静态类型转换等内容,旨在帮助读者深入理解C++的基础语法和操作。

4.28    

#include <iostream>

using namespace std;

int main()
{
	cout << "char: " << sizeof(char) << endl;
	cout << "short: " << sizeof(short) << endl;
	cout << "int: " << sizeof(int) << endl;
	cout << "long: " << sizeof(long) << endl;
	cout << "float: " << sizeof(float) << endl;
	cout << "double: " << sizeof(double) << endl;

	return 0;
}

4.29    第一个表达式结果为10,对数组执行sizeof得到整个数组所占空间的大小,除以数组元素的大小得到数组元素个数;
           第二个表达式结果为1,指针大小为4字节(不同编译环境可能不同),int大小也为4字节。

4.30    (a) sizeof (x + y);    //sizeof优先级高于加法
           (b) sizeof (p->mem[i]);    //可以不添加括号
           (c) sizeof (a < b);    //sizeof优先级高于<
           (d) sizeof (f());    //函数优先级高于sizeof,可以不添加括号

4.31    前置版本递增后直接返回改变了的运算对象,后置版本递增后返回原始值,前置版本更直接。本题使用后置版本得到相同的结果。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> ivec = {1, 2, 3, 4, 5, 6};
	vector<int>::size_type cnt = ivec.size();
	for (vector<int>::size_type ix = 0; ix != ivec.size(); ix++, cnt--)
		ivec[ix] = cnt;
	for (auto i : ivec)
		cout << i << " ";
	cout << endl;
	return 0;
	
}

4.32    for循环先令ptr指向数组ia首元素,令ix = 0; 判断ix没有增加到size且ptr没有指向数组尾后元素,执行循环体,之后递增ix和ptr。

4.33    条件运算符优先级高于逗号运算符,所以该表达式等价于:
           (someValue ? ++x, ++y : --x), --y
           先判断someValue是否为真,为真则执行++x,++y,否则执行--x;最后再执行--y

4.34    (a) fval转换为bool类型;
           (b) ival转换为float,求和后结果再转换为double;
           (c) cval转换为int,与ival相乘后结果转换为double,再与dval相加。

4.35    (a) 'a'转换为int,求和后转换为char,赋值给cval;
           (b) ival转换为double,ui转换为double执行减法,结果转换为float赋值给fval;
           (c) ui转换为float,相乘后结果转为double,并赋值给dval;
           (d) ival转为float,求和后转为double,求和后转为char,并赋值给cval。

4.36    i *= static_cast<int>(d);

4.37    (a) pv = static_cast<void*>(const_cast<string*>(ps));
           (b) i = static_cast<int>(*pc);
           (c) pv = static_cast<void*>(&d);
           (d) pc = static_cast<char*>(pv);

4.38    将j/i的结果强制转换为double类型,并赋值给slope。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值