1、引用
变量的引用:就是变量的一个别名,变量和变量的引用代表着同一个变量。
int a=5; //语句1
int & b =a; //语句2
int * p = &a; //语句3
这里a是一个普通的int类型的变量,b,是变量a的一个引用,p 就是指向变量a地址的一个指针变量。
其中语句2中的&符号是引用的声明符号,不是取地址符号,语句3中的符号& 是一个取地址符号。
区分:紧跟数据类型后面的&符号就是引用的声明符号,其他情况都可以认为是取地址符号。
引用的注意事项:
①、引用不是一种独立的数据类型,引用只有声明,没有定义,必须先定义一个变量,之后对该变量建立一个引用,即:有变量才有变量的引用,不可能先声明一个引用而不去引用任何变量,这和指针不同,指针可以先声明,之后的任意时刻都指向某个变量的地址;引用不是。
例如:int &b; //先声明定义一个引用是错误的。
②声明一个引用时,必须同时对其初始化,即声明该引用代表哪一个变量,这个跟第①点要表达的意思相同。但有一种例外情况是:当一个函数的参数是某个变量的引用时,形参不必在声明中初始化,它的初始化是在函数调用时的虚实结合实现的,即作为形参的引用是实参的别名;
void swap(int& a,int& b);
③、声明一个引用后,不能在让其作为另一个变量的引用。
例如:
int a1=2,a2=5;
int& b=a1; //正确
int& b=b2; //错误
④、不能建立引用数组 例如:
int a[5]={0};
int& b[5] = a; //错误
int& c=a[0]; //正确
⑤、可以建立引用的引用,也可以建立引用的指针。 例如:
int a=3;
int& b=a; //正确
int &c = b; //正确
int* p = &b; //正确,得到的是变量a的地址
*p = 5;
c=6;
**引用和指针的联系:**** 关于引用的性质,如果在程序中声明了b是变量a的引用,实际上在内存中为b开辟了一个指针型的存储单元,在其中存放变量a的地址,输出引用b时,就输出b所指向的变量a的值,相当于输出*b.引用其实就是一个指针常量,他的指向不能改变,只能指向一个指定的变量。所有,引用的实质还是指针,所有引用的功能都可以由指针实现。
引用的具体使用: 不使用指针,用引用的方式实现swap函数,功能是交换两个整形变量的值 实现如下:
#include<iostream>
using namespace std;
void swap(int& a, int& b)
{
int t = a;
a = b;
b = t;
}
int main(int argc, char* argv[])
{
int a = 5, b = 8;
swap(a, b);
cout << "a=" << a << "b=" << b << endl;
return 0;
}
使用New和delete动态分配内存
因为局部变量的局限性,只能在其作用域中使用。因此,我们需要动态的分配和撤销内存空间,使其可以在任何函数中使用
char* get_same_string(char* p1,char* p2)
{
//
}
get_same_string作用:从参数p1和p2中找出相同的部分。
**new出来的变量/内存的声明周期:** C++中new操作符和C语言中的malloc函数类似,如果不主动delete掉这段申请的内存,他会一直存在,知道进程结束后系统回收掉这段资源;而如果delete掉这段申请的内存,则这段申请到的内存的声明周期为new(申请内存)到delete(释放掉这段内存)所用的时间。
**new和delete的使用:** C语言中是使用malloc和free进行动态内存的申请与释放,C++使用new 和delete进行动态内存的申请与释放
int*p = (int*)malloc(sizeof(int)); //C语言使用malloc来申请一个类型int类型变量的内存
*p =5;
free(p); //释放内存
int* p =new int(5); //C++中使用new申请一个int类型变量的内存
delete p; //删除变量
另一个new优于malloc的地方是,用new申请一个类对象的时候,对象申请成功之后会默认调用其构造函数,而C语言中的malloc只会申请空间,但不会调用对象的构造函数。
资源来源于VC驿站,只作为个人学习记录
本文介绍了C++中的引用概念,包括引用的声明、初始化和特性,强调引用作为指针常量的性质。讨论了引用与指针的区别,并通过示例展示了如何使用引用实现变量交换。此外,还讲解了动态内存管理,包括new和delete的使用,以及动态内存的生命周期。最后,提供了一个使用引用的swap函数示例和动态内存分配的示例。


被折叠的 条评论
为什么被折叠?



