### 上海贝尔笔试题目知识点解析 #### 一、与“零值”比较的if语句 **1. BOOL变量与“零值”比较** - **正确写法:** - `if (flag)` - `if (!flag)` - **错误写法:** - `if (flag == TRUE)` - `if (flag == 1)` - `if (flag == FALSE)` - `if (flag == 0)` **解析:** - 在C语言中,`BOOL`类型的变量通常用来表示逻辑值(真或假)。`TRUE`和`FALSE`通常是预定义的宏,分别代表非零值和零值。 - 使用`if (flag)`或`if (!flag)`可以直接判断布尔变量的真假值。如果`flag`为真,则条件为真;如果`flag`为假,则条件为假。 - 使用`==`操作符进行比较不仅冗余,而且可能导致问题,尤其是当`TRUE`和`FALSE`被定义为特定的非零值时。 **2. float变量与“零值”比较** - **正确写法:** - `const float EPSILON = 0.00001;` - `if ((x >= -EPSILON) && (x <= EPSILON))` - **错误写法:** - `if (x == 0.0)` - `if (x != 0.0)` **解析:** - 浮点数的比较需要特别注意,因为浮点运算可能会引入微小的误差。直接使用`==`或`!=`与0.0进行比较可能导致错误的结果。 - 使用一个足够小的正数`EPSILON`作为误差范围,可以避免这类问题。通过检查浮点数是否在`-EPSILON`到`EPSILON`之间来确定它是否接近于零。 **3. 指针变量与“零值”比较** - **正确写法:** - `if (p == NULL)` - `if (p != NULL)` - **错误写法:** - `if (p == 0)` - `if (p != 0)` - `if (p)` - `if (!p)` **解析:** - C语言中,`NULL`是一个预定义的宏,通常定义为0,用于表示空指针。 - 指针变量与`NULL`进行比较是最常见的做法,这样可以清楚地表达指针是否为空。 - 直接使用`if (p)`或`if (!p)`虽然也可以实现同样的功能,但在代码的可读性和明确性上不如使用`NULL`。 #### 二、计算sizeof的值 - **示例代码:** ```c char str[] = "Hello"; char *p = str; int n = 10; void Func(char str[100]) { // ... } void *p = malloc(100); ``` - **计算结果:** - `sizeof(str) = 6`(包括字符串结束符`\0`) - `sizeof(p) = 4`(32位系统下指针大小) - `sizeof(n) = 4`(32位系统下整型大小) - `sizeof(str) = 4`(函数参数中数组退化为指针) - `sizeof(p) = 4`(32位系统下指针大小) **解析:** - `sizeof`操作符用于获取变量或数据类型所占的字节数。 - 对于字符数组,`sizeof`会计算数组的实际长度,包括字符串结束符`\0`。 - 对于指针,`sizeof`返回的是指针本身的大小,在32位系统中通常为4字节。 - 当数组作为函数参数传递时,它会退化为指针,因此`sizeof`计算的是指针的大小而非数组的实际大小。 #### 三、简答题 1. **头文件中的ifndef/define/endif的作用:** - 防止头文件被重复包含。 - 通过定义唯一的宏标识符来确保每个头文件只被包含一次。 2. **#include与#include “filename.h”的区别:** - `#include <filename>`:从标准库路径开始搜索文件。 - `#include "filename"`:首先从当前工作目录开始搜索文件。 3. **const关键字的用途:** - 定义常量。 - 修饰函数参数、返回值等,以增加程序的健壮性。 4. **C++程序中调用C编译器编译后的函数为什么需要加extern "C":** - C++支持函数重载,而C不支持。 - 使用`extern "C"`告诉C++编译器按照C的方式链接函数,以解决名字匹配问题。 5. **两种for循环的优缺点:** - 第一种循环简洁但效率较低。 - 第二种循环效率高但不够简洁。 #### 四、内存相关的思考题 - **第一题:** - `GetMemory`函数不能正确传递动态内存给`Test`函数。 - 结果:程序崩溃。 - **第二题:** - `GetMemory`函数返回的是栈内存的指针。 - 结果:可能显示乱码,因为栈内存中的数据可能已被覆盖。 - **第三题:** - `GetMemory2`函数应当修改为分配堆内存并返回指针。 - 正确写法: ```c void GetMemory2(char **p) { *p = (char*)malloc(100); // 分配堆内存 } ``` - 这样可以在`Test`函数中正确使用动态分配的内存。
剩余6页未读,继续阅读
- ryanchengoal2014-04-17感觉是以前的题,现在笔试已经不是这样了。
- sdadas2013-07-18常规的笔试题
- amozon2015-02-06题目太老了,而且阿朗有些部门开始用机试来代替笔试了
- 粉丝: 20
- 资源: 221
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据库课程设计-仓库管理系统中文最新版本
- 技术资料分享TF卡资料很好的技术资料.zip
- 技术资料分享TF介绍很好的技术资料.zip
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c