C++面试精华:判断零值与内存占用详解

需积分: 14 4 下载量 5 浏览量 更新于2024-09-09 收藏 74KB DOC 举报
在C++面试中,面试官可能会考察候选人的基础语法和理解能力,特别是对于数据类型、比较运算、内存管理和字符数组的操作。以下是一些常见的面试题及其解答,涉及了 bool、int、float、指针以及 sizeof 运算符的使用。 1. 对于bool、int、float和指针与“零值”的比较: - bool类型的变量a可以直接进行真假判断,例如`if(a)` - int类型的变量b需要与0进行精确的相等判断,避免赋值错误,如`if(0==b)` - float类型的变量c由于浮点精度问题,通常比较其是否在一个极小的范围内,如`if(c >= -0.0001 && c <= +0.0001)` - 指针d使用NULL(而非0)进行空指针检查,因为NULL表示特定的“空”状态,如`if(NULL == d)` 2. sizeof运算符的使用: - `sizeof('A'+false)`,字符'A'的ASCII值加上布尔值false(视为0)后,结果是字符'A'的ASCII值(65),因此sizeof结果为1。 - `sizeof(1+1.0)`,1和1.0相加,即使结果为整数2,但 sizeof 还是根据类型计算,1是int,1.0是double,总和为double,所以结果是8(32位系统下)。 - `sizeof(sizeof(double))`,两次sizeof都是计算double类型的大小,通常是8(32位系统),所以最终结果也是8。 - `sizeof(short x[])`,数组x的第一个元素的sizeof是取决于元素类型,short是2(假设是32位系统),如`sizeof(x[0])`结果为2。 - `sizeof(x)`是整个数组x的大小,因为数组的大小是元素个数乘以元素类型大小,这里为5 * sizeof(short),结果为10。 - `sizeof(short y[8])`与`sizeof(x)`类似,为32(8 * sizeof(short))。 - `sizeof(short* z = y + 2)`,z是一个指向short的指针,所以sizeof(z)是4(4字节的指针)。 - `sizeof(char* q = (char*)malloc(sizeof(double)))`,q是一个指向char的指针,malloc分配的是double的大小(8字节),但sizeof(q)仍然是4(因为是4字节指针)。 - `sizeof("Hello")`是字符串常量的大小,包括null终止符,通常是固定的,例如5(在C++中,每个字符占1个字节)。 - `sizeof("Hello"[2])`,访问字符串中的某个字符,实质上还是字符大小,即1。 - `sizeof(s)`,如果s是字符数组或指针,取决于具体定义,如果是指针则为4字节。 - `sizeof(*s)`,指针s所指向的元素的大小,如果是字符,则为1。 - `sizeof(p)`,如`s`,取决于p是否是实际的指针,如果是则为4字节。 - `sizeof(q)`,如`s`,如果q是char*指针,结果为4字节。 - `sizeof(*q)`,与`sizeof(*s)`相同,q指向的元素大小,通常是1字节。 这些题目展示了面试者对C++基本概念的理解,包括数据类型、运算符、内存分配和数组/指针的性质。在面试时,候选人不仅要正确写出代码,还要解释他们的思考过程和选择的理由。