1、C++指针和引用的区别
1.指针是保存存储地址 一般需要初始化为NULL。指针是一个新的变量,指向另一个变量的地址,我们可以通过访问这个地址来修改另一个变量
2.引用是取别名(类似小名),定义时候一定要初始化,不能为NULL。对引用的操作就是对变量的本身进行操作
3.引用不占用字节,但引用不可以改变:引用和变量指向同一片内存
4.指针占4个字节,指针可以指向不同的地址,可改名
5.引用比指针使用起来简洁、安全(警惕野指针!!!)
6. 在sizeof中含义不同:引用结果为引用类型的大小,指针始终是地址空间所占字节个数(32位:4字节 64位:8字节)
7. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
8. 有多级指针,但是没有多级引用
9. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
10.可以有const指针,但是没有const引用;
1.2、在函数中参数传指针和引用的区别
指针:
1、类似于值传递,传入函数的指针只是原指针的一个拷贝,所以此时是存在两个指针,同时指向一个内存空间(同时指向原对象) 2、当在函数中不改变拷贝指针的指向时,修改指针的值,就相当于修改原指针指向的对象 3、当在函数中改变拷贝指针的指向时,只是改变了拷贝指针的指向,不改变原指针的指向,所以不改变原指针指向的对象。 引用:
实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改,所以在用引用进行参数传递时,不仅节约时间,而且可以节约空间。
1.3、在函数中参数值传递、引用传递、指针传递
一、值传递 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
二、引用传递 引用传递中,形参为引用,引用即对象的别名。对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。 三、指针传递 形参为指向实参地址的指针,当对形参的指向操作时,也相当于对实参本身进行的操作
一、什么时候应该把形参定义为引用,什么时候不能定义为引用? 1、通过形参调用,修改函数的值,如上述swap()函数。 2、传递大型实参时,避免拷贝副本,可以使用引用传递。 3、通过一次调用输出多个结果类(增加引用形参的数量即可)。 另:当不需要通过函数调用改变实参的值时,就不需要用引用传递。
二、数组作为形参问题 数组有两个特性: 1、不允许拷贝:无法以值传递的方式使用数组形参 2、使用数组时通常都会转换为指针:当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针 数组作为形参分为两种:形参为数组和形参为数组的引用
2、C++重写和重载的区别
重载(overload):函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部,不能跨作用域。也就是说用同一个函数完成不同的功能
重写(override):也叫做覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数,返回值可以不相同,但是必须是父子关系的指针或引用.
重写需要注意:
1、 被重写的函数不能是static的。必须是virtual的
2 、重写函数必须有相同的类型,名称和参数列表
3 、重写函数的访问修饰符(public/private/protected)可以不同。
3、什么是进程
程序的执行实例被称为进程(process)。简单来说:进程是动态的概念,指的是程序的一次运行活动,通俗来说就是程序跑起来了,系统中就多了一个进程。程序的一次执行过程。
4、什么是程序
程序(program)是存放在磁盘文件中的可执行文件。