编程语言
首页 > 编程语言> > 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)析构函数采用析构函数是为了防止内存泄漏;

        

标签:初始化,const,函数,知识,C++,引用,拷贝,打理,指针
来源: https://blog.csdn.net/hhhshs/article/details/120585511