《高质量程序设计指南》C++题目
今天晚上下了本《高质量程序设计指南》,据说那几个题目 20个硕士里面,得50分以上的还没有超过一半。如果能得满分,
林锐博士拜你为师。我就很感兴趣的去做了一下,发现都很基本。我这个半路出家的人,居然也能做个80分。给了自己很大的信心,同时,
也觉得很多问题,还是平时很爱犯的错误。今天把我的错误贴出来和大家分享。
1. bool flag, float t 和 指针 char *p 如何 和 0 值进行比较。
bool :我的答案是 if (flag == 0) 0 分,标准答案 应该是 if (flag)。
float: 我的是 :
float t = 0.0;
if (fabs(t) <= FLT_MIN) {
printf("Zero Value");
}
只是我的答案,貌似要包含两个头文件。他的标准答案是这样的:
const float delt = 0.00001
if (x >= -delt && x <= delt)
只是这里, FLT_MIN 是不是限制的太强了,但是选择delt 的大小是个难题。
char *p 的比较方法是 if (p == NULL) 这个和标准答案一样。
只是,在老版本的编译器上,NULL 不能保证转换成指针.
这个题目,想了下,给自己 6分吧。
2. sizeof 计算下面的值。这个题目我全对(默认是win32 的机器).
char str[] = "Hello"; 这个是数组的初始化。sizeof 数组,就是这个数组占用的空间。
sizeof(str) = 6;
char *p = str;
sizeof(p) = 4; 在32 位机器上,这个是4. 指针的大小,一般是一个word 的大小。
int n = 10;
sizeof(n) = 4; 一般也是一个 word 的大小
void func(char P[100]) {sizeof(p) = 4} 数组默认是传地址的,所以,这个函数实际上传过来的是数组的头指针,而且是一个拷贝。
这个拷贝是一个普通的指针。是普通指针的大小。
void *p = malloc(100); sizeof (p) = 4 p 是普通指针,而非数组指针。所以是普通指针的大小。一个cpu 字。
做到这里,给我的感觉是,题目虽然简单,但是,也涉及C 的基本原理。
今天太迟了,要睡觉了。下次再续,把后面的题目再贴上来,给大家分享。