美图2017秋招C++笔试:sizeof与内存分配相关问题
版权申诉
136 浏览量
更新于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++编程基础才能解答这些题目。
228 浏览量
点击了解资源详情
128 浏览量
228 浏览量
2021-12-08 上传
2021-12-08 上传
281 浏览量
2023-06-06 上传
218 浏览量
java李杨勇
- 粉丝: 37w+
- 资源: 3180
最新资源
- STM32F103 4路超声波
- Plot Superquadratic Surfaces:这是一对用于绘制一般超椭圆体和超环面的函数-matlab开发
- JQueryRevision
- flat-view
- 行业分类-设备装置-一种接枝SiOsub2sub粒子簇取向增强涤纶纤维的制备方法.zip
- grpc_stream-medium
- 移远调试+升级工具包.rar
- LiterateTest.jl
- 行业分类-设备装置-一种接触式密封倒置型气波制冷机.zip
- next-redux-toolkit-auth
- 6ES7215-1AG40-0XB0_V04.04.00.zip
- sentry-heroku:在 heroku 上快速简单地设置哨兵 7 服务器
- ptwaters87.github.io:项目网站
- 卡斯巴赫特
- 行业分类-设备装置-一种接触冷感性聚酯纤维织物.zip
- pycocotools.zip