IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C/C++的知识打理一 -> 正文阅读

[C++知识库]C/C++的知识打理一

1、引用和指针的区别:

? ? ? ? (1)指针是一个实体需要分配内存空间,而引用时一个别名不需要分配内存空间;

? ? ? ? (2)指针定义的时候不一定初始化,并且指向的空间可变,引用需要初始化且不可变;

? ? ? ? (3)有多级指针,并没有多级引用;

? ? ? ? (4)其自增效果不一样(指针是指向下一个空间,而引用则是变量加1);

? ? ? ? (5)sizeof()不同,sizeof 指针 是指针的大小,而sizeof引用是对象的大小;

? ? ? ? (6)指针是间接访问,而引用是直接访问;

? ? ? ? (7)传递参数不同;指针传递的是指针的地址(传值),引用传递的是地址;

? ? ? ? ? ? ? ? (传值;可以拿这个值来运算,原来的还在;传地址将运算后的结果直接存入,原来的

? ? ? ? ? ? ? ? ? ? ?就不在了);

2、指针参数传递和引用参数传递:

? ? ? ? (1)指针参数传递 :值传递(地址值),形参指针变,实参不会变;

? ? ? ? (2)引用参数传递:栈中开辟内存空间,形参操作会影响实参;

? ? ? ? ?相同点:都是在栈上开辟空间。不同点:引用间接改变主函数相关变量。

3、形参和实参的区别:

? ? ? ? (1)形参内存(调用时分配),调用结束后释放;

? ? ? ? (2)函数调用中发生的数据传送是单项的,也就是只能从实参到形参传递;

? ? ? ? (3)传递方式的分类:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)值传递:有一个形参向函数所属的栈拷贝数据的过程。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)指针传递:同样是这个过程,不过拷贝的是一份地址。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)? 引用传递:对该数据的地址,起一个别名。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?效率:指针传递和引用传递会比值传递的效率高;

4、static的用法和作用:

? ? ? ? (1)隐藏:当编译多个文件时,没有加static的都具有全局可观性。

? ? ? ? (2)保存变量内容持久,(存储在静态数据区)只进行一次初始化。

? ? ? ? (3) 默认初始化为0;

? ? ? ? (4)类成员声明:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)可以在模块内被访问,不能在模块外访问。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)所有对象共享这一内存;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)this 只能访问static的变量,不能访问到其函数。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (4)需要在类外进行初始化;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(5)static函数只能访问static成员;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (6)成员函数不能被虚函数修饰;

5、静态变量什么时候初始化:

? ? ? ? (1)在主程序之前,在编译的时候,编译器已经为它分配空间。

6、const、mutable、extern

? ? ? ? const对象只能调用const成员函数,不能调用非const函数;

? ? ? ? int *const p1 或者 const int *p1(const 修饰的是*p1);

? ? ? ? const 如果想在const 成员方法中改变成员变量的值,那么需要将这个成员变量修饰? ? ? ? ????????为?mutable;

? ? ? ? extern修饰变量声明:如果文件a要用文件b的变量就可以在a中声明extern,函数也是一样。

7、深拷贝和浅拷贝

? ? ? ? (1)浅拷贝:仅仅只是指向被复制的内存的地址。

? ? ? ? (2)深拷贝:在计算机中有开辟了一块新的内存地址。

? ? ? ? 总结:浅拷贝只是对,指针进行拷贝,而深拷贝不仅对指针而且对指针指向的内容进行? ? ? ? ? ????????拷贝。浅拷贝(delete)释放两次会出错。

8、c++模板是什么的实现。

? ? ? ? 编译器会对模板编译两次,一次是在声明的地方进行编译,另一个则是在调用的地方进行编? ? ? ??????译。

9、c语言struct和c++struct的区别

????????(1)C语言的struct是用户自定义数据类型,而C++是抽象数据类型(支持多态和继承);

? ? ? ? (2)C中的struct是没有权限设置的,C++中struct默认是public(为了与c兼容);

10、类成员的初始化;

? ? ? ? (1)赋值初始化,通过函数体内进行赋值初始化。

? ? ? ? ?(2)列表初始化,在冒号后使用初始化。

? ? ? ? 区别:(1)所有成员分配内存之后才开始进行,(2)分配内存空间的时候就进行。

11、为什么初始化列表会快一些;

? ? ? ? 因为C++赋值操作时会产生临时对象的,临时对象对降低程序的执行效率;

12、必须使用成员初始化

? ? ? ? (1)当初始化一个引用成员时,

? ? ? ? (2)当初始化一个常量成员时,

? ? ? ? (3)当调用一个基类的构造函数,它拥有一组参数,

? ? ? ? (4)当调用一个成员类的构造函数,它拥有一组参数,

13、构造函数为什么不能用虚函数、而析构函数为什么要虚函数。

? ? ? ? (1)从存储空间角度来讲,虚函数相应指向vtable虚函数表的指针,这个大家都知道,但时这? ?????????个指向vtable的指针事实上是存储在对象内存空间的,也就是构造函数实现的时候对象还实? ? ? ? ? ? ?例化,还没有一个内存空间。

? ? ? ? (2)析构函数采用析构函数是为了防止内存泄漏;

????????

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 16:54:12  更:2021-10-03 16:56:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:36:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码