1.new的学习
//new的学习
#include<iostream>
using namespace std;
int main()
{
int* p = new int(20); //利用new创建一个整型 ,返回的是地址
int* array = new int[10]; //利用new创建一个数组,返回的是首个元素的地址
cout << *p << endl;
delete p; //释放
for (int i = 0; i < 10; i++)
{
array[i] = i; //遍历创建的数组并赋值
}
delete[] array; //释放创建的数组,[]记得加
return 0;
}
2.引用的学习
// 引用的学习
// 给变量取别名
//数据类型 &别名 = 原名
#include<iostream>
using namespace std;
int main()
{
int* p = new int(20);
int*& c = p; //c和p访问的地址是一样的
cout << *c << endl;
cout << *p << endl;
int a = 20;
int& b = a;
int d = 30;
int& b = d; //编译不通过,b显示重定义,多次初始化
return 0;
}
引用注意事项
1.引用必须初始化
int &b ; 这样的语法是错误的,我们一开始就要告诉计算机b是谁的别名。
2.引用一旦初始化,就不可修改,即b是a的别名之后,不能再将b设置成c的别名。
引用来实现传递
可以做到形参修饰实参
#include<iostream>
using namespace std;
void swap(int& a, int& b);
int main()
{
int a = 20, b = 200;
swap(a, b);
cout << a << " " << b << endl;
return 0;
}
void swap(int& a, int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}
引用作为函数返回值类型
#include<iostream>
using namespace std;
int& test();
int main()
{
int& ref = test();
cout << "ref = "<<ref << endl;
cout << "ref = " << ref << endl; //所以说不要返回局部变量的引用,因为局部变量的数据用完一次之后就会被释放
return 0;
}
int& test()
{
int a = 10;
return a;
}
修改方式是将 局部变量改为静态变量,存放在全局区,全局区的数据是在程序结束完之后再释放。
引用的本质
引用的本质在c++的内部实现是一个指针常量
int a = 10;
int& ref = a; // 实质是 int *const ref =&a;
//指针常量是指针指向不可更改,也就说明了引用不可更改
ref =20; //内部发现是引用,自动帮我们转换为 : *ref=20;
常量引用
首先要知道
int a = 10;
int& ref = 10; //这是不合法的,引用必须引用一块合法的空间
const int& ref = 10;// 编译器将代码改为 int temp=10; int &ref =temp;这就是const的作用
// 这样就做到了常量引用
主要使用场景是防止误操作修改实参的值
void showValue(const int& v)
{
//v = v + 10; 这样的代码一写出来就会报错,因为会修改实参的值,从而避免误操作。
cout << v << endl;
}