//4.1
105
//4.2
(a)*(vec.begin())
(b)(*(vec.begin())) + 1
//4.4
((12 / 3) * 4) + (5 * 15) + ((24 % 4) / 2)
91
//4.5
(a)-86 (b)-18
(c)0 (d)-2
//4.6
n % 2 == 0
//4.7
计算机存储某种类型的存储空间有限
所以对该类型的表示能力也是有限的
当计算结果超出这个范围就会产生溢出
i = 30000000000 * 30000000000
....
//4.8
逻辑与和逻辑或都是先判断左边再判断右边,相等性运算符没有规定求值顺序
//4.9
如果cp有指向,且指向的地址有内容则指向if
//4.10
while (cin >> n && n != 42);
//4.11
a > b && b > c && c > d
//4.12
i != (j < k)
//4.13
(a)d = 3.0, i = 3
(b)i = 3, d = 3.5
//4.14
第一句42是字面值,不是左值,不能作为赋值运算符的左侧运算对象,会发生编译错误
第二句语法上是对的,但是永远是true,可能违背本意
//4.15
ival = pi是错的,不能将整型指针赋给整型变量
dval = ival = 0;
pi = 0;
//4.16
(a)不等于运算符游侠你高于赋值运算符
if ((p = getPtr()) != 0)
(b)混淆赋值运算符和判断相等运算符
if (i == 1024)
//4.17
前置版本先加1,然后把对象作为求值结果
后置版本也是加1,但是是把运算之前的对象作为求值结果
//4.18
会跳过第一个元素
如果所有元素都不是负的,会越界
//4.19
(a)先判定ptr是否为空,然后判定所指的对象是否为0,都正确则返回true。最后ptr向前一位
(b)虽然&&规定了先左再右的顺序,但这样写还是不太好
改写为:ival && (ival + 1)
(c)错误,求值顺序不一定
改写为:vec[ival] <= vac[ival + 1]
//4.20
(a)合法,解引用迭代器当前位置的内容,然后迭代器加1
(b)不合法,解引用后就是string,相当于string++
(c)不合法,点运算符优先级高于解引用,这里相当于*(iter.empty())
(d)合法,相当于(*iter).empty()
(e)不合法,先解引用iter得到string,然后++string
(f)合法,相当于(*iter++).empty(),解引用当前位置的内容,然后判断这个内容是否为空,最后iter加1
//4.21
for (int i = 0; i < vec.size(); i++)
if (vec[i] % 2)
vec[i] = vec[i] * vec[i];
//4.22
//4.23
string p1 = s + ((s[s.size() - 1] == 's') ? "" : "s");
//4.24
//4.25
10000000 000000000011100 10000000
//4.26
所占空间最小值是16,不足以存放全部学生信息,造成信息丢失
//4.27
(a)二进制的11
(b)二进制的111
(c)true
(d)true
//4.29
10 返回数组容量
1 对指针使用返回指针所占空间大小,指针占4字节,int占4字节,最后返回1
//4.30
(a)sizeof(x + y)
(b)sizeof(p->mem[i])
(c)sizeof(a < b)
(d)sizeof f() 函数调用运算符优先级高于sizeof,所以不用括号
//4.31
不需要做改动,后置结果也是一样的
vector<int>::size_type cnt = ivec.size();
for (vector<int>::size_type ix = 0; ix != ivec.size(); ix++, cnt--)
ivec[ix] = cnt;
//4.32
遍历数组
//4.33
如果someValue是true则执行++x, ++y,否则执行--x, --y
//4.34
(a)float转换为布尔值
(b)ival转换为float,相加后整个式子转换为double
(c)cval整型提升为int,相乘后转换为double和dval相加
//4.35
(a)'a'整型提升为int
(b)ival整型提升为double,ui转换为double,整个式子最终为float
(c)ui转换为float,相乘后整个式子转换为double
(d)ival转换为float和fval相加,再转换为double和dval相加,最后整个式子转换为char
//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