【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++ 代码无缝地集成。

相关推荐
CHANG_THE_WORLD35 分钟前
python 批量终止进程exe
开发语言·python
古城小栈37 分钟前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
keep one's resolveY1 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
学涯乐码堂主1 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
云栖梦泽2 小时前
Linux内核与驱动:14.SPI子系统
linux·运维·服务器·c++
Gary Studio2 小时前
安卓HAL C++基础-智能指针
开发语言·c++
还是阿落呀2 小时前
基本控制结构2
c++
啧不应该啊2 小时前
Day1 Python 与 C 的类型区别
c语言·开发语言
女生也可以敲代码2 小时前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
多思考少编码2 小时前
PAT甲级真题1001 - 1005题详细题解(C++)(个人题解)
c++·python·最短路·pat·算法竞赛