C++知识点总结(上):指针和引用,static关键字,const关键字,malloc\free和new\delete的区别等

本文深入探讨C++中的关键概念,包括函数传参方式、内存管理、static和const关键字的使用、宏定义与函数的区别等,并对比了C与C++、面向过程与面向对象的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                C++问题总结(上)
1.函数传指针引用的区别?
   (1).引用定义必须初始化,指针可以不用
   (2).指针可以和多个实体结合,引用只能和一个实体结合??
   (3).没有空引用,但是有控制指针
   (4).有多级指针,但是没有多级引用
   (5).引用比指针用起来更安全,不用判空
   (6).sizeof求值意义不相同。--sizeof(指针)是指针所占的字节数,32位(4),64位
                                              --sizeof(引用)是引用所指的实体类型的大小
   (7).自加减意义不同。指针++是指针向后偏移类型个字节??
                                    而引用则是+1

2.malloc\free  和 new\delete 的区别?
     **double *p =(double*)malloc(sizeof(double)*数字)
    (1).malloc\free 是函数;new\delete是操作符
    (2).malloc要手工计算字节数;而new自动计算分配空间
    (3).malloc只是单纯的申请内存空间<无法满足动态对象的要求>;new、delete
        会调用构造函数和析构函数
    (4).malloc返回时需要判空;new直接抛异常
    (5).malloc返回值是void*,调用时malloc要显示进行类型转换<强制类型转换
         >;new返回对象的类
    联系:
    (1).malloc\free 和new\delete要配对使用
    (2).c++ 提供了new[]\delete[]来处理数组类型
    (3).new的底层会调用malloc,delete的底层会调用free
    operator new\operator delete & operator new[]\operator delete[]
    (1).他们和malloc的用法一样
     (2).他们只负责分配空间\释放空间,不会调用对象的构造函数和析构函数来初始化
           和清理对象
     (3).实际上operator new\operator delete只是malloc\new的一层封装

3.static关键字
   static可修饰局部变量,全局变量,函数
    在修饰局部变量时:
    (1).在静态区开辟
    (2).生命周期为整个函数的运行时间,默认初始化为0
    (3).变量具有记忆功能,即每次保存上一次调用后的值(在静态存储区保存)
    (4).在函数第一次调用时创建,构造函数只调用一次??
   在修饰全局变量和函数时:
    在文件作用域中使用可改变链接属性,仅在当前文件中使用
    在修饰类的成员变量和函数时:static静态成员
    (1).静态成员为对象所共享,不属于某个实例
    (2).访问类的静态成员---类名::静态成员或对象.静态成员
    (3).静态成员必须在类外定义,定义时不添加static关键字
    (4).类的静态成员没有默认的this指针,因此在类里面不能使用任何非静态成员
    (5).静态成员和其他类一样,也具有public\protected\private3种访问级别,也具
         有返回值,也能被const修饰

4.const关键字(及const和#define的区别?)
    (1).const可以定义常量,具有不可变性(从汇编的角度,const常量只给出了地址,
          而宏给出了立即数)
    (2).防止意外修改,增强程序的健壮性
    (3).会进行类型检查,使编译器对处理内容有所了解,消除一些隐患
    (4).同#define一样,不变则已,一变都变(但是宏只进行字符替换,缺乏类型检测)
    (5).可以节省空间,避免不必要的内存分配
         const定义常量,只分配一次内存----#define定义,有若干个内存分配
    (6).提高效率
    C和C++中const的区别:
    (1).C中,const定义变量时它还是变量,只是具有了常性,不可修改
    (2).C++中,const定义变量,认为是常量

5.#define和函数的区别?
                                   宏                                                函数
代码长度---- 调用一次,代码加长一次 -----  每次都调用同一个代码
执行速度----执行速度较快 -----   由于参数压栈的开销,执行速度较慢
操作符的优先级----必须加括号-----调用时求一次值,将结果传给函数
参数求值----每次调用重新求值,参数具有副作用-----参数求值传给函数
参数类型----与类型无关---参数与类型有关
是否调试----不可调试-----可调试
返回值-----可以得到多个结果----只能返回一个结果写类型固定

6.struct和class的区别?
     默认访问权限不同:struct是public,class是private

7.C++中的封装:(访问限定符public,protected,private)
    隐藏对象的属性和实现细节,仅仅对外提供一些公开接口和对象进行交互,将数据和操作数据的方法进行有机结合

8.面型对象与面向过程的区别?
   面向过程程序设计方法:采用函数(过程)来对数据操作处理,又将函数与其操作
                                          的数据分离开来----以过程为中心,难于维护
   面向对象程序设计方法:是将数据和对象的操作封装在一起,作为一个整体来处理
                                          ----以数据为中心,稳定性强,易于维护

9.C\C++的对比
   (1).文件后缀不同,C 通常是.c结尾,C++通常是.cpp结尾
   (2).默认返回值不同和缺省参数不同,若一个函数没有指定返回值C默认返回int型,
        C++默认返回void型
   (3).默认参数列表不同,在没有指定参数列表的情况下,C默认接受多个参数C++默
        认void不接收任何参数
   (5).解决问题的思想和方法不同,C 是面向过程的,C++是面向对象的

10.debug和release的区别?
   Debug称为调试版本,它包含调试信息并不做任何优化,便于调试
   Release称为发布版本,它进行各种优化,使得程序在代码大小和运行速度上都是
    最优的

11.程序的执行过程
      预处理—>编译—>汇编—>链接—>执行
      1.预处理:(1).宏替换(2).头文件的展开(3).删除注释(4).添加行号文件名等
      2.编译: 语法,词法,语义分析产生相应的汇编代码---一般语法错误就在编译时
      3.汇编:将汇编代码 转换成计算机可执行的二进制指令
      4.链接:导出符号表(??),地址重定向表,未解决的符号表
      5.执行:执行程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值