new 操作符:
利用new运算符在堆区开辟数据,语法: new 数据类型
#include<iostream>
using namespace std;
int* func()//基本语法
{
int* p = new int(10);
return p;
}
void test01()//开辟数组
{
int* p = func();
cout << *p << endl;
delete p;//删去堆区数据
//cout << *p << endl;//内存已经被释放,再次访问就是非法操作
}
void test02()
{
int *arr=new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 100;
}
for (int i = 0; i < 10; i++)
cout << arr[i] << endl;
//释放堆区数组
delete[]arr;
}
int main()
{
test01();
test02();
}
引用:
语法: 数据类型 &别名=原名;
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int& b = a;//引用初始化
int c = 20;
b = c;//这是赋值,不是引用更改
cout << "a= " << a << endl;
cout << "b= " << b << endl;
b = 100;//由b引用后,间接更改a的数值
cout << "a= " << a << endl;
cout << "b= " << b << endl;
}
引用必须初始化
引用在初始化后,不可以改变
利用引用来做函数参数
void mySwap03(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
mySwap03(a, b);
cout << "a:" << a << " b:" << b << endl;
不要返回局部变量引用
函数调用作为左值
//返回局部变量引用
int& test01() {
int a = 10; //局部变量
return a;
}
//返回静态变量引用
int& test02() {
static int a = 20;
return a;
}
int main() {
//不能返回局部变量的引用
int& ref = test01();
cout << "ref = " << ref << endl;
cout << "ref = " << ref << endl;
//如果函数做左值,那么必须返回引用
int& ref2 = test02();
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
test02() = 1000;
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
system("pause");
return 0;
}
引用的本质是一个指针常量
函数:
1.如果我们传入自己的数据,就用自己的数据,如果没有那就用默认数据
2.如果某位置有函数默认值,那么其余往后都有默认值
3.声明和实现只能有一个有默认参数
#include<iostream>
using namespace std;
int func(int a, int b , int c );//声明和实现只能有一个有默认参数
int main() {
cout << func(10, 30);//结果为70,而不是60
//如果我们传入自己的数据,就用自己的数据,如果没有,就用默认值
}
int func(int a, int b = 20, int c = 30)//如果某位置有函数默认值,那么其余往后的都要有默认值
{
return a + b + c;
}
函数占位参数:
返回值类型 函数名(数据类型){}//直接在括号中写数据类型即可