new 分配空间;引用
一、new
new 操作符是分配堆区内存空间的,delete释放
// 开辟一个 int型 并初始化为100
int* type1()
{
int* p = new int(100);
return p;
}
// 开辟一个 整形数组
int* type2()
{
int* arr = new int[10];
for (int i = 0; i < 10; i++)
arr[i] = i + 1;
return arr;
}
int main()
{
int* p = type1();
cout << *p << endl;
int* arr = type2();
for (int i = 0; i < 10; i++)
cout << arr[i] << ' ';
// 释放 new开辟的内存
delete p;
p = NULL;
delete[] arr;
arr = NULL;
return 0;
}
new 的返回值是开辟空间的地址
二、引用
1、基本使用: 类型 &别名=原名 ,对应同一地址
int main()
{
int a = 10;
cout << "a前的值:" << a << endl;
int& b = a;
b = 20;
cout << "a后的值:" << a << endl;
cout << "b的值:" << b << endl;
// 10 20 20
return 0;
}
二、注意事项
①、一定要初始化
②、引用后,不能改变
int a=10;
in c=100;
int &b =a; √
int &b; ×
int &b = c ; ×
三、引用做函数参数:
引用也是将同一地址给了出去
// 指针接收
void Swap_1(int* a, int* b)
{
int c = *a;
*a = *b;
*b = c;
}
// 引用
void Swap_2(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
int main()
{
int a = 10;
int b = 99;
cout << "交换前:" << a <<' ' << b << endl;
Swap_1(&a, &b);
Swap_2(a, b);
cout << "交换后:" << a<<' ' << b << endl;
return 0;
}
得出的结果一样
四、引用做函数的返回值
int& test()
{
// 不能返回局部变量的引用、地址
static int a = 10;
return a;
}
int main()
{
int& ret = test();
cout << "ret = " << ret << endl;
cout << "ret = " << ret << endl;
test() = 999;
//当 引用作为函数返回值,这个函数调用可以作为左值
cout << "ret = " << ret << endl;
cout << "ret = " << ret << endl;
return 0;
}
五、引用的本质:
本质是 : 指针常量
int main()
{
int a = 10;
// 本质 int* const ret = &a;
int& ret = a;
// 本质: *ret = 100;
ret = 100;
cout << a << ' ' << ret << endl;
return 0;
}
本质是 :int* const ret = &a; 所以引用初始化后不能改变指的地方,但是可以改变值
🚗🚗 🚗 🚗 🚗 🚗 🚗 🚗