面试题


1. 问题:`volatile` 关键字的作用是什么?  
   答案:`volatile` 关键字用于指示编译器不应优化对变量的访问,适用于多线程或中断处理程序中的变量。

2. 问题:`static` 关键字的作用是什么?  
   答案:`static` 关键字用于保持变量在程序的生命周期内保持其值,或者限制变量的作用域。

3. 问题:`extern` 关键字的作用是什么?  
   答案:`extern` 关键字用于声明全局变量或函数,但不定义它们,可以在其他文件中使用。

4. 问题:`const` 关键字的作用是什么?  
   答案:`const` 关键字用于声明常量,防止其值被修改。

5. 问题:`const` 关键字适用于哪些情况?  
   答案:`const` 关键字适用于需要保护不被修改的数据。

6. 问题:`new/delete` 和 `malloc/free` 有什么区别?  
   答案:`new/delete` 用于动态内存分配和释放,并调用构造和析构函数,而 `malloc/free` 只是分配和释放内存。

7. 问题:`strlen("\0")` 和 `sizeof("\0")` 的值分别是多少?  
   答案:`strlen("\0")` 的值是0,因为它返回字符串的长度,不包括空字符。`sizeof("\0")` 的值是1,因为它返回字符串的大小,包括空字符。

8. 问题:结构体和联合体有什么区别?  
   答案:结构体的所有成员共享内存空间,而联合体的成员共享同一块内存空间。

9. 问题:左值和右值是什么?  
   答案:左值是可寻址的内存位置,右值是不可寻址的临时值。

10. 问题:什么是短路求值?  
    答案:短路求值是逻辑运算中的一种优化方式,只有在必要时才对右侧表达式进行求值。



30. 什么是++a和a++的区别?  
++a会先将a的值加1,然后返回增加后的值;而a++会先返回a的值,然后再将a的值加1。

31. #define和typedef的区别是什么?  
#define用于创建宏定义,而typedef用于为已有类型定义新的名称。

32. C语言是如何进行函数调用的?  
C语言进行函数调用时,会将函数参数压入栈中,然后跳转到函数的入口地址执行函数体。

33. C语言中内存分配的方式有哪些?  
C语言中内存分配的方式包括静态内存分配、栈内存分配和堆内存分配。

34. 堆和栈有什么区别?  
堆和栈的主要区别在于存储方式和生命周期,堆是动态分配的内存,生命周期由程序员管理;而栈是自动分配的内存,生命周期与函数调用相关。

35. 栈的用途是什么?  
栈用于存储局部变量、函数参数、函数调用信息等数据,以及用于函数调用的执行上下文。

36. 压栈的顺序是什么?  
压栈的顺序是先进后出(FILO),即最后压入栈的元素最先被弹出。

37. C++中的内存管理是如何实现的?  
C++中的内存管理通过new和delete操作符来动态分配和释放内存,以及使用智能指针来管理资源。

38. 什么是内存泄漏?  
内存泄漏指的是程序中分配的内存未被正确释放,导致程序运行时消耗的内存不断增加,最终可能导致系统资源耗尽。

39. 数组指针和指针数组有什么区别?  
数组指针是指指向数组的指针,而指针数组是指存储指针的数组。

40. 函数指针和指针函数有什么区别?  
函数指针是指指向函数的指针,而指针函数是指返回指针的函数。

41. 数组名和指针有什么区别?  
数组名是数组的地址,而指针是一个指向内存地址的变量。

42. 指针常量、常量指针、指向常量的常量指针分别是什么?  
指针常量是指指针本身是常量,指针所指向的值可以修改;常量指针是指指针所指向的值是常量,指针本身的值可以修改;指向常量的常量指针是指指针本身是常量,指针所指向的值也是常量。

43. 指针和引用有什么区别?  
指针是一个变量,存储的是一个地址;而引用是已定义变量的别名,与原变量共享存储空间。

44. 什么是野指针?  
野指针是指指向未知内存地址的指针,使用野指针可能导致程序崩溃或产生未定义行为。

45. C++中的智能指针是什么?  
C++中的智能指针是一种RAII(资源获取即初始化)的设计模式,用于管理动态分配的内存,可以自动释放所管理的资源,从而避免内存泄漏的发生。
全部评论

相关推荐

投递阿里巴巴等公司10个岗位
点赞 评论 收藏
转发
8 18 评论
分享
牛客网
牛客企业服务