C++ 面试中常见11个问题

本系列将会以思维导图形式梳理C++面试中常见问题。


static 关键字作用


const关键字作用

#define var 100
int a, b;
a = var;
b = var;
//内存被分配两次
const int var = 100;
a = var;
b = var;
// 内存被分配一次

// const 修饰指针 离谁近修饰谁
//常量指针 不能被修改 
char * const ptr;
// 指针常量 类型所描述的内存区域不能被修改
const char * ptr = "hello word"
    

指针与引用


如何避免野指针


malloc free和new delete的区别


extern 关键字作用


extern代码示例
  1. 文件里面 extern
#include <stdio.h>

int main() {
    extern int var_main;
    extern void func_main();
    func_main();
    printf("main var_main = %d\n", var_main);
    return 0;
}

int var_main = 100;
void func_main() {
    printf("main var_main = %d\n", var_main);
}
  1. 文件外面
#include <stdio.h>

int var_other = 99;

void func_other() {
    printf("func_other var_other = %d\n", var_other);
}
#include <stdio.h>

int main() {
    extern int var_main;
    extern int var_other;
    extern void func_main();
    extern void func_other();
    func_main();
    printf("main var_main = %d\n", var_main);
    func_other();
    printf("main var_other = %d\n", var_other);
    return 0;
}

int var_main = 100;
void func_main() {
    printf("main var_main = %d\n", var_main);
}
  1. C++中访问C中变量
#include <stdio.h>

int var_c = 99;

void func_c() {
    printf("func_c var_c = %d\n", var_c);
}
#include <stdio.h>

extern "C" int var_c;
extern "C" void func_c();
int main() {
    func_c();
    var_c = 100;
    printf("extern_cpp var_c=%d\n", var_c);
    return 0;
}

注意:需要分别编译,然后链接生成目标文件。
:::info
gcc extern_c.c -c
gcc extern_cpp.cpp -c
gcc extern_c.o extern_cpp.o -o extern_cplus_c
:::

简述strcpy、sprintf和memcpy的区别


代码示例
#include <stdio.h>
#include <string.h>

int main() {
    char buf_a[64] = {0};
    char buf_b[64]= {'a', 'b', 'c', '\0', 'd'};
    char *str = strcpy(buf_a, buf_b);
    printf("str = %s, buf_a = %s\n", str, buf_a);
    return 0;
}

运行结果:
:::info
str = abc, buf_a = abc
:::

#include <stdio.h>
#include <string.h>

int main() {
    char buf_a[64] = {'z', 'z', 's', 'd', 'a'};
    char buf_b[64] = {'a', 'b', 'c', '\0', 'd'};
    
    memcpy(buf_a, buf_b, 3);
    printf("buf_a:%s\n", buf_a);
    memcpy(buf_a, buf_b, 4);
    printf("buf_a:%s\n", buf_a);
    memcpy(buf_a, buf_b, 5);
    printf("buf_a:%s\n", buf_a);
    
    char *str = strcpy(buf_a, buf_b);
    printf("str = %s, buf_a = %s\n", str, buf_a);
    
    int n = sprintf(buf_a, "len:%d str:%s addr:%p\n", 6, buf_b, buf_b);
    printf("n = %d, buf_a = %s\n", n, buf_a);
    
    return 0;
}

运行结果:
:::info
buf_a:abcda
buf_a:abc
buf_a:abc
str = abc, buf_a = abc
n = 34, buf_a = len:6 str:abc addr:0x7ffe34e6a940
:::

C/C++中类型转换以及使用场景


C++什么时候能生成默认构造函数


C++什么时候默认生成拷贝构造函数


什么是深拷贝?什么是浅拷贝?

参考

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:https://course.0voice.com/v1/course/intro?courseId=5&agentId=0

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些常见C++面试问题及其答案: 1. 什么是C++C++是一种面向对象的编程语言,用于开发高性能的应用程序,包括操作系统、游戏、数据库、Web浏览器、图形用户界面等。 2. C++的继承是什么? 继承是一种面向对象的编程概念,它允许一个类继承另一个类的属性和方法。子类继承父类的所有公有成员,包括变量和函数。继承使得代码可重用性更高,同时也使代码更易于维护。 3. C++的多态是什么? 多态是一种面向对象的编程概念,它允许不同的对象对同一消息作出不同的响应。在C++,多态是通过继承和虚函数实现的。 4. C++的虚函数是什么? 虚函数是一种特殊的成员函数,允许派生类重写基类的函数。当使用指向基类的指针或引用调用虚函数时,将调用派生类的版本。虚函数允许实现多态性。 5. C++的引用是什么? 引用是一种指向变量的别名,它与指针不同,不需要使用解引用运算符。引用通常用于函数参数,允许修改函数调用的变量。 6. C++的const关键字是什么? const关键字用于定义常量,即不能更改的变量。const还可以用于函数参数和函数返回值,以指示它们不能被修改。const还可以用于类成员函数,以指示它们不会修改对象的状态。 7. C++的模板是什么? 模板是一种通用编程技术,允许编写不依赖于特定数据类型的代码。模板可以用于函数和类,允许在编译时生成代码。 8. C++的STL是什么? STL是标准模板库的缩写,是C++标准库的一部分。STL提供了一组通用的数据结构和算法,包括向量、列表、堆栈、队列、映射、集合、排序和搜索等。 9. C++的内存管理是什么? C++的内存管理是指程序在运行时如何使用和释放内存。C++的内存由程序员手动分配和释放,使用new和delete运算符。C++还提供了一组智能指针类,帮助程序员管理内存。 10. C++的异常处理是什么? 异常处理是一种处理程序运行时错误的方法,允许程序在出现错误时终止执行,并提供错误处理机制。C++的异常处理使用try、catch和throw关键字实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值