文章目录本系列将会以思维导图形式梳理C++面试中常见问题。
- static 关键字作用
- const关键字作用
- 指针与引用
- 如何避免野指针
- malloc free和new delete的区别
- extern 关键字作用
- extern代码示例
- 简述strcpy、sprintf和memcpy的区别
- 代码示例
- C/C++中类型转换以及使用场景
- C++什么时候能生成默认构造函数
- C++什么时候默认生成拷贝构造函数
- 什么是深拷贝?什么是浅拷贝?
static 关键字作用
#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"
指针与引用
- 文件里面 extern
#includeint main() { extern int var_main; extern void func_main(); func_main(); printf("main var_main = %dn", var_main); return 0; } int var_main = 100; void func_main() { printf("main var_main = %dn", var_main); }
- 文件外面
#includeint var_other = 99; void func_other() { printf("func_other var_other = %dn", var_other); }
#includeint main() { extern int var_main; extern int var_other; extern void func_main(); extern void func_other(); func_main(); printf("main var_main = %dn", var_main); func_other(); printf("main var_other = %dn", var_other); return 0; } int var_main = 100; void func_main() { printf("main var_main = %dn", var_main); }
- C++中访问C中变量
#includeint var_c = 99; void func_c() { printf("func_c var_c = %dn", var_c); }
#includeextern "C" int var_c; extern "C" void func_c(); int main() { func_c(); var_c = 100; printf("extern_cpp var_c=%dn", 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
:::
#include#include int main() { char buf_a[64] = {0}; char buf_b[64]= {'a', 'b', 'c', ' ', 'd'}; char *str = strcpy(buf_a, buf_b); printf("str = %s, buf_a = %sn", str, buf_a); return 0; }
运行结果:
:::info
str = abc, buf_a = abc
:::
#include#include int main() { char buf_a[64] = {'z', 'z', 's', 'd', 'a'}; char buf_b[64] = {'a', 'b', 'c', ' ', 'd'}; memcpy(buf_a, buf_b, 3); printf("buf_a:%sn", buf_a); memcpy(buf_a, buf_b, 4); printf("buf_a:%sn", buf_a); memcpy(buf_a, buf_b, 5); printf("buf_a:%sn", buf_a); char *str = strcpy(buf_a, buf_b); printf("str = %s, buf_a = %sn", str, buf_a); int n = sprintf(buf_a, "len:%d str:%s addr:%pn", 6, buf_b, buf_b); printf("n = %d, buf_a = %sn", 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
:::



