f IT职场那些事-面试题目-C语言 - Powered by qidao123.com技术社区

面试题目--C语言

打印 上一主题 下一主题

主题 2250|帖子 2250|积分 6750

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言题目解答

此文章为C++面试宝典C语言部分题目的解答条记。
1、const的作用有哪些?谈一谈你对const的理解?



  • 核心作用

    • 定义不可修改的常量:如 const int MAX = 100;。
    • 增强范例安全:编译器会查抄const变量的非法修改操作。
    • 掩护函数参数或返回值:例如 void func(const int* p) 防止指针指向内容被修改。
    • 优化可能性:编译器可将const变量放入符号表,减少内存访问。


2、描述char*、const char*、char* const、const char* const的区别?

范例指针可变性内容可变性示例char*✔️✔️p++正当,*p='a'正当const char*✔️❌p++正当,*p='a'非法char* const❌✔️p++非法,*p='a'正当const char* const❌❌均不可变 记忆口诀



  • const在*左侧:指向内容不可变(如const char*)
  • const在*右侧:指针本身不可变(如char* const)

3、指针常量和常量指针有什么区别?



  • 常量指针​(const int* p):指向内容不可变,但指针可重定向。
  • 指针常量​(int* const p):指针地址固定,但内容可修改。

4、static的作用是什么?什么环境下用到static?



  • 作用

    • 隐藏作用域:全局变量/函数仅在当前文件可见。
    • 延永生命周期:局部变量在程序运行期间存在(如计数器))。
    • ​类/结构体中的静态成员:属于类本身而非实例,全部对象共享(C++中)

  • 使用场景

    • 必要恒久化局部变量(如计数器)。
    • 限定全局变量/函数的可见性(制止定名冲突)。


5、全局变量与局部变量的区别?

特性全局变量局部变量​作用域整个程序函数/块内​存储位置静态存储区栈​生命周期程序运行期间函数调用期间​默认值自动初始化为0未初始化时为随机值
6、宏定义的作用是什么?



  • 作用

    • 代码复用:简化重复代码(如#define MAX(a, b)。
    • 条件编译:根据条件选择性编译代码块(如#ifdef DEBUG。
    • 常量定义:替换字面量,提高可读性。


7、内存对齐的概念?为什么会有内存对齐?



  • 概念:数据地址需满意对齐规则(如4字节范例地址需为4的倍数)。
  • 缘故原由

    • 硬件要求:某些CPU只能访问对齐地址。
    • 性能优化:对齐后内存访问减少次数。


8、inline内联函数的特点有哪些?优缺点是什么?



  • 特点

    • 编译时展开:制止函数调用开销。
    • 短小干练:适合频繁调用的小函数。

  • 优点:提高执行效率。
  • 缺点:代码膨胀(多次展开可能导致文件变大)。

9、如何用C实现C++的面向对象特性(封装、继续、多态)?



  • 封装
    使用结构体隐藏数据,通过函数指针操作成员
    1. typedef struct {
    2.     int data;
    3.     void (*print)(void* self);
    4. } Object;
    复制代码
  • 继续
    结构体嵌套实现派生类(基类作为第一个成员)
    1. typedef struct {
    2.     Object base;
    3.     int derived_data;
    4. } Derived;
    复制代码
  • 多态
    函数指针动态绑定差别实现(如虚函数表)

10、memcpy怎么实现让它效率更高?



  • 优化计谋

    • 内存对齐:按机器字长(如4/8字节)拷贝,减少非对齐访问
    • SIMD指令:使用SSE/AVX指令集并行拷贝大块数据
    • 减少分支:制止循环中的条件判断(如固定步长拷贝)
    • 预取数据:提前加载数据到CPU缓存


11、typedef和define有什么区别?

特性typedefdefine​处置惩罚阶段编译时预处置惩罚时​范例安全✔️(范例查抄)❌(文本替换)​作用域块作用域文件作用域​复杂声明支持(如函数指针)需额外括号3335

  • 示例
    1. typedef int* IntPtr;  // 定义类型别名
    2. #define PTR int*     // 文本替换(可能引发错误)
    复制代码

12、extern有什么作用?extern C有什么作用?



  • extern
    声明变量或函数在外部定义(用于跨文件访问全局变量)
    1. extern int global_var; // 声明而非定义
    复制代码
  • extern “C”
    在C++中指示编译器按C语言方式编译函数(制止名称修饰,方便C/C++混淆编程)

13、如何制止野指针?



  • 方法

    • 初始化置NULL:int *p = NULL;
    • 开释后置空:free(p); p = NULL;
    • 制止返回局部变量地址:局部变量栈空间可能被覆盖
    • 使用智能指针(C++)​:自动管理生命周期


14、如何盘算结构体长度?


  • 对齐规则

    • 成员按自身巨细与编译器对齐基数较小者对齐;
    • 结构体总巨细为最大成员对齐值的整数倍

  • 示例
    1. struct Example {
    2.     char a;      // 1字节(对齐到1)
    3.     int b;       // 4字节(对齐到4,前补3字节)
    4. };               // 总大小 = 1 + 3(填充) + 4 = 8字节[43]
    复制代码

15、sizeof和strlen有什么区别?

特性sizeofstrlen​范例运算符函数​作用盘算内存巨细(含’\0’)盘算字符串长度(不含’\0’)​参数范例或变量字符串指针4547

  • 示例
    1. char str[] = "hello";
    2. sizeof(str);  // 6(包含'\0')
    3. strlen(str);  // 5
    复制代码

16、知道条件变量吗?条件变量为什么要和锁配合使用?



  • 条件变量
    用于线程间同步,允许线程等候特定条件成立(如资源就绪)
  • 与锁配合的缘故原由

    • 原子性:查抄条件和进入等候需在锁掩护下,制止竞态条件
    • 制止唤醒丢失:开释锁后,其他线程可修改条件并发出信号

  • 典型用法
    1. pthread_mutex_lock(&mutex);
    2. while (condition_not_met) {
    3.     pthread_cond_wait(&cond, &mutex);
    4. }
    5. // 操作共享资源
    6. pthread_mutex_unlock(&mutex);
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表