| |
|
开发:
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语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/29 4:03:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |