概述
目录
一、引用
1.做参数
2.做返回值
3.常量
4.引用和指针
二、内联函数
一、引用
1.做参数
void swap(int* p1,int* p2)
{
}
void swap(int& r1,int& r2)
{
}
int main()
{
int a = 1,b = 2;
swap(&a, &b);
swap(a, b);
return 0;
}
通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(char* a, int* pi) // c
{}
BTNode* BinaryTreeCreate(char* a, int& ri) // cpp
{}
int main()
{
char* ptr = "ABD##E#H##CF##G##";
int i = 0;
BinaryTreeCreate(ptr, i);
return 0;
}
链表的声明
typedef struct Node
{
struct Node* next;
int val;
}Node, *PNode;
//*PNode
//typedef struct Node* PNode;
//void SLTPushBack(Node** pphead, int x); // C
void SLTPushBack(Node*& phead, int x); // CPP
void SLTPushBack(PNode& phead, int x);
int main()
{
Node* plist = nullptr;
SLTPushBack(&plist, 1);
SLTPushBack(plist, 1);
return 0;
}
2.做返回值
①减少拷贝
传值返回,需产生临时变量,将n的值拷贝到临时变量内在传给ret;
int& Count()
{
static int n = 0;
n++;
return n;
}
int main()
{
int ret = Count();
return 0;
}
②调用者可以修改返回对象
return ay.a[i] 的返回类型为int&,是别名,所以数组内的值可进行更改
#define N 10
typedef struct Array
{
int a[N];
int size;
}AY;
int& PosAt(AY& ay, int i)
{
assert(i < N);
return ay.a[i];
}
int main()
{
AY ay;
for (int i = 0; i < N; ++i)
{
PosAt(ay, i) = i*10;
}
for (int i = 0; i < N; ++i)
{
cout << PosAt(ay, i) << " ";
}
cout << endl;
return 0;
}
//0 10 20 30 40 50 60 70 80 90
3.常量
指针和引用,赋值/初始化 ----权限可以缩小,但是不能放大
//int main()
//{
// int a = 1;
// int& b = a;
//
// // 权限放大
// /*const int c = 2;
// int& d = c;
//
// const int* p1 = NULL;
// int* p2 = p1;*/
//
// // 权限保持
// const int c = 2;
// const int& d = c;
//
// const int* p1 = NULL;
// const int* p2 = p1;
//
// // 权限缩小
// int x = 1;
// const int& y = x;
//
// int* p3 = NULL;
// const int* p4 = p3;
//
// return 0;
//}
rd为double类型,进行类型转换时,产生临时变量,而临时变量不可修改;const修饰的变量在C++中被看作是常量也不可修改,此时可认为const是对临时变量做修饰。
int i = 10;
cout << (double)i << endl;
double dd = i;
//double& rd = i;
const double& rd = i;
4.引用和指针
相同点:
在 语法概念上 引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。在 底层实现上 实际是有空间的,因为 引用是按照指针方式来实现 的。
引用和指针的汇编代码对比:
不同点:
1. 引用概念上定义一个变量的别名,指针存储一个变量地址2. 引用 在定义时 必须初始化 ,指针没有要求3. 引用 在初始化时引用一个实体后,就 不能再引用其他实体 ,而指针可以在任何时候指向任何一个同类型实体4. 没有 NULL 引用 ,但有 NULL 指针5. 在 sizeof 中含义不同 : 引用 结果为 引用类型的大小 ,但 指针 始终是 地址空间所占字节个数 (32位平台下占4 个字节 )6. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小7. 有多级指针,但是没有多级引用8. 访问实体方式不同, 指针需要显式解引用,引用编译器自己处理9. 引用比指针使用起来相对更安全
二、内联函数
以 inline 修饰 的函数叫做内联函数, 编译时 C++ 编译器会在 调用内联函数的地方展开 ,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。
注意:
内联函数不能声明和定义同时存在,因为在展开的时候在声明处找不到函数,因此直接在".h"处定义即可。
(未完待续......)
最后
以上就是虚心钻石为你收集整理的C++入门(二)一、引用二、内联函数的全部内容,希望文章能够帮你解决C++入门(二)一、引用二、内联函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复