c/c++笔试题

preview
需积分: 0 74 下载量 155 浏览量 更新于2008-07-19 收藏 48KB DOC 举报
【C/C++笔试题知识点详解】 1. 表达式判断 在C/C++中,自增自减运算符的优先级和结合性决定了它们的执行顺序。题目中的四个表达式涉及到自增自减运算符的使用。A) `(a++)` 先自增再赋值,B) `[++a]` 先自增再赋值,C) `(a++) += a` 是错误的,因为`(a++)`不是一个有效的左值,不能作为赋值操作的目标,而D) `(++a) += (a++)`则会先自增`a`,然后将自增后的`a`与再次自增后的`a`相加。根据这些规则,可以依次得出答案:9, 10, 10, 11。 2. `sizeof`操作符 `sizeof`用于计算对象或类型的大小。在32位系统中: - `(1)` `sizeof(str)`:计算字符串数组的大小,包括结束的空字符`\0`,所以是17。 - `(2)` `sizeof(p)`:`p`是一个指向字符的指针,其大小通常为32位系统的4字节。 - `(3)` `sizeof(n)`:`n`是一个整数,大小为4字节。 - `(4)` `Foo`函数中`str`是局部数组,`sizeof(str)`依然返回数组类型本身的大小,即4字节,不考虑实际分配的字符数。 - `(5)` `p`是一个指向void的指针,其大小在任何情况下都是4字节,不依赖于实际分配的内存大小。 3. 预处理指令 `(1)` `ifndef/define/endif`是预处理器指令,用于条件编译,防止头文件被多次包含。 `(2)` `#include <filename.h>`用于包含标准库头文件,`#include "filename.h"`用于包含用户定义的头文件。 `(3)` `extern "C"`的作用是在C++代码中调用C编译器编译的函数,保持函数名不被C++的名称修饰。 4. 数据类型限制 `(4)` `switch()`语句中不允许使用浮点型(实型)数据,因为C/C++的标准规定`switch`只接受整型或枚举类型。 5. 动态内存管理 `(1)` `GetMemory`函数分配内存并将其地址赋给`str`,`strcpy`拷贝字符串后,`Test`函数输出“hello”。 `(2)` 在`Test`函数中,释放内存后,`str`仍然指向原来的位置,但该位置的内存已释放,再次`strcpy`和输出会导致未定义行为。 `(3)` `GetMemory`返回的是一个栈上的局部变量的地址,返回后这个局部变量就失效了,因此`Test`函数中`str`指向的内存区域是无效的,输出结果不可预测。 6. 自定义`strcat`函数 `(1)` 自定义`strcat`函数的实现是通过遍历目标字符串直到找到结尾,然后逐个复制源字符串的字符到目标字符串的末尾。 `(2)` `strcat`返回`strDest`是为了符合C/C++标准库中的习惯,方便链式调用,比如`str = strcat(str, "world")`。 7. 模板类 C++模板类用于创建泛型代码,提高代码复用性和类型安全性。它们可以应用于各种数据类型,确保编译时类型检查,并且可以在运行时动态适应不同数据类型。 8. CSingleLock 在MFC(Microsoft Foundation Classes)中,`CSingleLock`是一个用于线程同步的类,它用于获取和释放对某一资源的独占访问权,通常与`CRITICAL_SECTION`等同步对象一起使用,保证多线程环境下的数据一致性。