习题
1.你使用的C++编译器中,指针值的输出形式是怎样的?提示:不要查阅你的C++编译器文档。
2.一个int占多少字节?double呢?bool呢?不要使用sizeof,除非你要验证自己的答案。
3.编写一个函数void to_low(char*s),将C风格字符串s中的所有大写字符都替换为对应的小写字符。例如,“Hello,World!”替换为“hello,world!”。不要使用任何标准库函数。C风格字符串是一个由0结束的字符数组,因此在结尾你会发现一个值为0的char。
4.编写一个函数char*strdup(const char*),将C风格字符串复制到自由空间上分配的内存中。不要使用任何标准库函数。
5.编写一个函数char*findx(const char*s,const char*x),在C风格字符串s中查找字符串x首次出现的位置。
6.本章没有说明当你使用new用尽内存时会发生什么。这种情况被称为内存耗尽(memory exhaustion)。搞清楚将会发生什么。你有两个明显的选择:查阅你的C++编译器的文档,或者编写一个用无限循环分配内存但不释放的程序。两者都尝试一下。在失败之前你大约分配了多少内存?
7.编写一个程序从cin读取字符保存到自由空间上分配的数组中。读取字符直到输入感叹号(!)为止。不要使用std::string。不要担心内存耗尽。
8.重新做练习7,但这次将读取的字符存入std::string,而不是自由空间上的内存中(string知道如何使用自由空间)。
9.栈向哪个方向生长:向上(趋向高地址)还是向下(趋向低地址)?自由空间初始时向哪个方向生长(在使用delete之前)?编写程序来找到答案。
10.查看你对练习7的解决方案。是否有办法输入数组而导致溢出;也就是说,是否能输入比为数组分配的空间更多的字符(一个严重的错误)?如果你试图输入比分配的空间更多的字符时,将会发生什么合理的现象? ...