栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

文章目录
      • static 关键字作用
      • const关键字作用
      • 指针与引用
      • 如何避免野指针
      • malloc free和new delete的区别
      • extern 关键字作用
        • extern代码示例
      • 简述strcpy、sprintf和memcpy的区别
        • 代码示例
      • C/C++中类型转换以及使用场景
      • C++什么时候能生成默认构造函数
      • 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 

int 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);
}
  1. 文件外面
#include 

int var_other = 99;

void func_other() {
    printf("func_other var_other = %dn", var_other);
}
#include 

int 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);
}
  1. C++中访问C中变量
#include 

int var_c = 99;

void func_c() {
    printf("func_c var_c = %dn", var_c);
}
#include 

extern "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
:::

简述strcpy、sprintf和memcpy的区别


代码示例
#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
:::

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


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


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


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号