#include<iostream>//c++的输入输出
using namespace std;
//int inline add(int a, int b)
//{
// return a + b;
//}
////int add(int a, int b)
////{
//// return a + b;
////}
//int main()
//{
// //内联函数与有参宏的区别?
// // 1.有参宏是在预处理的时候展开的,内联函数在编译时展开
// // 2.有参宏是直接文本替换,而内联函数是有语法检查的
// //对于简单函数(可能存在高频次的调用)我们可以设计为inline函数(内联函数)
// // 内联函数设计时一定要体积小,逻辑简单
// // inline函数在被调用的位置上,进行展开(内嵌),就是将函数体的功能直接拿出来使用而不会像普通函数一样需要经过复杂操作
// int ret = add(10, 20);//add是inline函数,则会直接展开
// //调用add函数的时候,系统做了什么事情?
// // 1.保存现场2.将函数入栈3.以先右后左将实参入栈4.调用函数功能并获取结果5.恢复现场,接收结果,同时回收上一次函数的栈空间
// ////1.指针变量可以存在引用 数据类型*&引用名=指针变量
// //int n = 10;
// //int* np = &n;
// //int*& np_r = np;
// //const int* np2 = np;
// //const int*& np2_r = np2;
// ////2.数组能存在别名 数据类型(&别名)[长度]...=数组名
// //int arr[10]{ 1,2,3,4,5,6,7,8,9,10 };
// //int(&arr_r)[10] = arr;
// //for (int i = 0; i < 10; i++)
// //{
// // cout << arr[i] << " ";
// //}
// //设计字符串
// ////引用的本质:在编译时,将引用优化为指针
// ////普通引用优化成指针常量
// //int n = 1;//n 是一块内存,值为1
// //int* p = &n;//p里面存着n的地址
// //int& r = n;//r就代表n 没有独立内存 优化后为 int *const r=&n;
// //*p = 5;//通过*从内存中把n改成5 此时r也变成5
// //r = 10;//直接操作n 将n变为10
// ////*p r n 都为10
//}
////利用引用进行交换
////void swap_val(int& a, int& b)
////{
//// int temp = a;
//// a = b;
//// b = temp;
////}
////int main()
////{
//// int x = 10;
//// int y = 20;
//// swap_val(x, y);
////}
////int main()
////{
//// //const引用:万能引用 初始化值可以为常数 变量 const变量
// const int& len = 1;//可以给常数
// const int len2 = 20;
// const int& len2_r = len2;
// //int& y = len2_r;len2_r相当于常数 普通引用不能引用常数
//}