本系列将会以思维导图形式梳理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代码示例
- 文件里面 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);
}
- 文件外面
#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);
}
- 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