引言
C++学习笔记(一)-CSDN博客、C++学习笔记(二)-CSDN博客、C++学习笔记(三)-CSDN博客,博主之前写的博客包含了C++的程序框架、以及各种关键字在C++中的用法,以及C++中的结构体等相关知识,以及取地址符、const关键字在C++中的应用、内联函数,函数中的默认值,以及C++中的函数重载。
本篇学习笔记将接着上述的知识点逐渐的梳理,逐步的从C语言中向着C++去过渡,完成向着C++语言的程序结构去过渡。本篇学习笔记将整理C++中的引用,以及C++中开辟动态空间的方法等知识点进行整理。博主也是刚刚开始学习C++的小白,如果学习笔记中有任何的错误之处,还请私信与我,帮我修正错误之处,谢谢。
一、引用在C++中的应用
在C语言中,我们我们在调用一个函数的时候常采用两种方式进行传输参数。一种是采用拷贝的方式将实际参数传输给形式参数,进行函数的调用。但是这种形式势必会造成一定的空间浪费。所以在我们在学完C语言中的指针部分,将函数调用时的传参改成了传递变量的地址,这种方式极大的节约了内存的占用。
但是C语言中第二种传递函数的方法写出的代码较为繁琐,举个例子:
//定义的函数
int add(int* x, int* y){
return *x + *y;
}
//主函数中
int a = 10;
int b = 20;
c = add(&a,&b);
printf("%d\n", c);
该函数将将实际参数a,b的地址传输给形式参数,然后将计算的数值返回。可以看到此种方法虽然减少了内存的占用,但是写起来相对来将就比较繁琐。所以C++为了简化步骤,设计了引用。
引用的格式:
类型& 引用变量 = 变量;
引用变量其实就是相当于变量的另一个名字,没有开辟新的空间,所以引用的最大的用处就是传递参数。
注意:const修饰的引用有着很多的好处,如:可以提高传参效率,可以保护实参的安全,可以引用常量。
二、引用和指针的区别:
从编译器角度来讲,引用其实就是更加高级的指针。
从语法角度来讲,引用变量相当于变量的另一个别名,引用并不会开辟新的空间,但是指针可以指向任何地方,并且指针可以进行多次的赋值,但是引用只可以被引用一次。
三、动态开辟空间的方式
在c语言中我们采用malloc函数对堆区进行开辟空间,形式如下:
int* p = (int*)malloc(sizeof(int));
//当然开辟内存空间时可能出现开辟失败的情况
if(p == NULL)
{
printf("开辟内存空间失败\n");
return -1;
}
//采用此种开辟空间的方式,并没有进行初始化,需要额外进行初始化操作
*p = 1;
//为了开辟空间的同时完成初始化操作,此时可以使用calloc开辟空间
int* p = (int*)calloc(2,sizeof(int));
//上述开辟方式中的2指的是开辟2个空间
在C++中采用new开辟空间,形式如下:
int* p = new int;
//此种开辟没有进行初始化
int* p = new int(1);
//这种开辟空间的同时进行了初始化的操作
//在堆区上开辟连续的多个空间
int* p = new int[100];
//在堆区上开辟连续的多个空间并初始化为0的操作
int* p = new int[100]{};
//堆上利用new开辟的空间需要手动释放
delete p;
//堆上利用new连续开辟的空间需要利用下行释放
delete[] p;
注意:当定义了一个结构体类型,构造了不低于1组的类型,在64位的操作系统中,会在链表头前开辟一个8个byte位来保存要构造的次数。此时使用释放开辟的空间时需要使用delete[],而不能使用delete