【C++ 面试 - 基础题】每日 3 题(九)

✍个人博客:Pandaconda-CSDN博客

📣专栏地址:http://t.csdnimg.cn/fYaBd

📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~

❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

25. sizeof 的使用

sizeof 是 C 语言中的运算符,用来计算一个类型/对象的所占用的内存大小,有些 C/C++面试官会出一些 sizeof(xxx) 的大小是多少的问题。

我总结了几个关键的点,掌握这几个基本上就能答对大部分类似问题了:

  1. 指针的大小永远是固定的,取决于处理器位数,32 位就是 4 字节,64 位就是 8 字节。

  2. 数组作为函数参数时会退化为指针,大小要按指针的计算。

  3. struct 结构体要考虑字节对齐。

  4. 字符串数组要算上末尾的 '\0'。

举个例子:

26. 变量 的声明和定义有什么区别

变量的定义为变量分配地址和存储空间, 变量的声明不分配地址。一个变量可以在多个地方声明,但是只在一个 地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间, 如外部变量。

cpp 复制代码
int main()
{
    extern int A;
    //这是个声明而不是定义,声明A是一个已经定义了的外部变量
    //注意:声明外部变量时可以把变量类型去掉如:extern A;
    dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变

27. 如果 C++ 想用调用 C 的库,有什么需要的注意的吗?

  1. 头文件包含方式:C 库的函数声明通常定义在头文件中,为了能够在 C++ 中正确使用这些库函数,应当使用 extern "C" 来告诉 C++ 编译器这些函数是按照 C 的方式进行编译和命名的。例如:
cpp 复制代码
extern "C" {
    #include "C_library.h"
}
  1. 命名空间:C 库通常不包含在命名空间中,而 C++ 代码是通过命名空间来组织和管理的。因此,在 C++ 中调用 C 库函数时,需要使用全局作用域操作符 (::) 来显式指定函数所在的命名空间,例如:
cpp 复制代码
::C_library_function();
  1. 函数指针和回调:C 库中常常使用函数指针和回调函数来实现某些功能。在 C++ 中,可以使用函数指针和函数对象(Functor)来实现函数回调。需要注意的是,函数指针和函数对象的类型与库函数的期望参数类型要匹配。

  2. 异常处 理:C 库通常不会抛出异常,而是通过返回特定的错误码来表示错误。在调用 C 库函数时,需要注意检查返回值以判断函数是否执行成功,并根据需要进行相应的错误处理。

  3. 类型兼容性:C++ 具有更丰富的类型系统和功能,因此存在一些类型兼容性的问题。在调用 C 库函数时,需要注意 C 和 C++ 的数据类型和内存布局的差异,确保正确地转换和处理数据。

总结起来,调用 C 库时,需要注意正确地包含头文件,使用 extern "C" 声明函数,处理命名空间、异常处理等问题,并根据实际情况进行类型兼容性的处理。这样可以确保 C++ 代码能够正确地调用 C 库,并与 C++ 代码无缝地集成。

相关推荐
MATLAB代码顾问2 分钟前
MATLAB实现粒子群算法优化PID参数
开发语言·算法·matlab
雪度娃娃4 分钟前
结构型设计模式——桥接模式
c++·设计模式·桥接模式
陈天伟教授6 分钟前
图解人工智能(1)居里点
大数据·开发语言·人工智能·gpt
翎沣6 分钟前
C++11异常处理机制
java·c++·算法
何陋轩13 分钟前
Spring AI Alibaba实战:通义千问与Java的完美融合
人工智能·后端·ai编程
大鹏说大话23 分钟前
Kotlin vs Java:Android之外,后端开发该怎么选?
开发语言
念你那丝微笑23 分钟前
2026年Vue前端面试准备
前端·vue.js·面试
Copy_Paste_Coder24 分钟前
小程序失败后,换个方向,终于成功搞到收益
前端·javascript·后端
skywalker_1129 分钟前
注解和反射
java·开发语言
爱代码的小黄人30 分钟前
总谐波畸变率 THD 的计算公式整理:MATLAB 官方公式与论文常用公式对比
开发语言·matlab