美图2017秋招C++笔试:sizeof与内存分配相关问题

版权申诉
0 下载量 75 浏览量 更新于2024-09-09 收藏 1.24MB PDF 举报
在美图2017年秋季招聘C++开发工程师的笔试试卷中,题目涉及了对C++语言基础、数据类型、内存管理、预处理器指令以及字符串处理函数的理解。以下是一些关键知识点的详细解释: 1. `sizeof`运算符:这是C++中的一个运算符,用于计算变量或数据类型在内存中所占的字节数。在提供的代码片段中,`sizeof(str)`和`sizeof(p)`分别表示字符数组`str`和指针`p`的大小。`str`是一个长度为100的字符数组,通常情况下它会占用100个字符(每个字符1字节)加上一个终止符(通常是'\0',1字节),所以`sizeof(str)`的值可能是101或102,具体取决于实现。`p`作为一个指针,通常没有实际存储的数据,它的大小通常是系统定义的,通常为4或8字节,因此`sizeof(p)`可能为4。 2. 动态内存分配:`malloc()`函数用于在运行时动态分配内存。`void *p = malloc(100);`这行代码将分配100字节的内存,并返回一个指向该内存的指针。由于C++中的`void *`不带类型信息,`sizeof(p)`通常会是4或8,具体取决于系统,但在这里题目可能期望考生理解这个指针本身所占的固定空间,而不是它所指向的内存大小,因此选项(1)和(2)可能是正确答案。 3. 预处理器指令:`#ifndef`, `#define`, 和 `#endif` 是C/C++编译器中的预处理器指令,用于条件编译。`#define`用来定义宏,`#ifndef`则检查某个宏是否已定义,如果没有则执行包含的代码块,而`#endif`用于关闭定义区域。这些指令在C++中主要用于控制代码的编译流程,如包含头文件或者条件编译。 4. 函数声明与调用:`void Func(charstr[100]){}` 是一个无返回值的函数声明,接受一个字符数组作为参数。`void f(const int i){}` 是一个函数声明,接受一个常量整型参数。`strcpy` 是C标准库中的字符串复制函数,`strcpy(char* strDest, const char* strSrc);`用于将`strSrc`的值复制到`strDest`。`extern "C"`表明函数将以C的方式链接,以解决C++和C之间的名字冲突。 5. 字符串常量和字符数组:`const char* str = "Hello";` 创建了一个指向字符串常量的指针,字符串常量是在编译时就确定的,其大小由字符串的实际字符数加终止符决定。字符数组如`char str[100]`则需要动态分配内存,且需要手动添加终止符。 6. 常量和常量修饰符:在C++中,`const`关键字可以用来修饰变量或函数参数,表示它们在程序运行期间不会改变。`const int kSendLengthUnit = 0x34;`定义了一个常量整数,表示发送长度单位。 这份试卷主要考察了C++的基础语法、数据结构、内存管理和库函数的使用,同时涉及了预处理器指令和不同类型的声明。考生需要具备扎实的C++编程基础才能解答这些题目。