引用:&

&放在左边就是引用,放在右边就是取地址

int  main() {
//引用的类型必须相同,一经引用,不可以在被引用
int a = ;
int &b = a;//b引用a之后,两个同时都会改变,此时b已经指向a了,如果在来一个c的话,不能在去指向c。b和a的类型必须相同
b = ;//必须初始化,int就是初始化,实质上是*b=304,默认会加上*
printf("a:%d,b:%d\n", a, b);
}

给数组起别名:

//给数组起别名

int  main() {
int arr[];
for (int i=;i < ;i++) {
arr[i] = i;
} //用&引用,起别名
int (&parr)[] = arr;//用parr引用arr,相当于是arr重新赋值给了parr
for (int i = ;i < ;i++) {
cout << parr[i] << endl; } }

第二种方式起别名,typedef

    //第二种方式起别名
typedef int Arrpy[];
Arrpy &parr2 = arr;
for (int i = ;i < ;i++) {
cout << parr2[i] << " ";
}
cout << endl;

//尽量使用const替代define
//define宏常量没有类型概念
//define宏没有作用域概念

参数的传递方式:

值传递:

void  swap1(int a,int b) {
int temp = a;
a = b;
b = temp; } void s1(){
int a = ;
int b = ;
swap(a, b);//传递;两个值进去
cout << "a:" << a << " b:"<<b << endl;
}

指针传递:

//指针传递
void swap2(int *a,int *b) {
int temp = *a;
*a = *b;
*b = temp;
} void s2() {
int a = ;
int b = ;
swap2(&a, &b);
cout << "a:" << a << "b:" << b << endl; }

运行结果:

引用传递:

//引用传递
void swap3(int &a,int &b) {
int temp = a;
a = b;
b = temp;
}
void s3() {
int a = ;
int b = ;
swap3(a, b);
cout << "a:" <<a << "b:" << b << endl; }
int main() {
s3();
}

如果函数的返回值是引用的话,那么可以是作为左值的操作

int  & test07(){
static int a = ;
return a;
}
int main() {
int &res = test07();//内部就是int * const res=&test07();内部就是一个指针常量
cout << res <<endl; }

注意:不要返回函数局部变量的引用

引用的本质就是在C++内部实现的指针的常量,指针的本质就是一个指针常量

利用指针来开辟内存空间:

struct Person2
{
int age;
string name;
}; //利用指针来开辟空间
void test10(Person2* &p) {//这边引用,p就是传过来的指针,就是引用
p = (Person2*)malloc(sizeof(Person2));
p->age = ;
}
int main() {
Person2 *p1=NULL;
test10(p1);//相当于传了一个指针过去,&p1>>>>>>>
cout << "age" << p1->age << endl;
}

用指针来接受:**p

void  malloc1(Person2 **p) {
//用指针来接收,**p就是person2对象,*p就是person2指针,p就是person对象的指针的指针
*p = (Person2*)malloc(sizeof(Person2));//强制转换
(*p)->age = ;
cout << "age:" << (*p)->age << endl;
}
void test11() {
Person2 *p1=NULL;
malloc1(&p1);//
}
int main() {
test11(); }

C++入门篇三的更多相关文章

  1. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  2. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]

    三.使用Azure AD管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信息 ...

  3. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.5 Delete删除用户]

    3.5 Delete删除用户 删除也是通过ObjectID获得对象进行删除 [Authorize] public async Task<ActionResult> Delete(strin ...

  4. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.4 Edit修改用户信息]

    3.4 Edit修改用户信息 我们用FormCollection简化了表单提交,非常方便的进行用户信息修改. [HttpPost, Authorize] public async Task<Ac ...

  5. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.3 Details用户详细信息]

    3.3 Details用户详细信息 用户详细信息是通过objectId获取.代码如下 public async Task<ActionResult> Details(string obje ...

  6. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.2 Create创建用户]

    3.2 Create创建用户 [HttpPost, Authorize] public async Task<ActionResult> Create( [Bind(Include = & ...

  7. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.1 Index用户列表]

    3.1 Index用户列表 或许当前域下的用户列表 [Authorize] public async Task<ActionResult> Index() { var userList = ...

  8. Android攻城狮学习笔记—入门篇三

    第十章 CheckBox 与其他控件类似 有自己的监听方法 实现监听 并定义被选中或取消后的操作 第十一章 RadioGroup和RadioButton RadioGroup是RadioButton的 ...

  9. 【SSRS】入门篇(四) -- 向报表添加数据

    原文:[SSRS]入门篇(四) -- 向报表添加数据 定义好数据集后 [SSRS]入门篇(三) -- 为报表定义数据集 ,就可以开始设计报表了,将要显示在报表的字段.文本框.图像和其他项从工具箱拖放到 ...

随机推荐

  1. 通过secureCRT连接虚拟机VMware workstation问题记录

    很急没有使用虚拟机了,今天再登录的时候,发现用secureCRT连接不上VMware workstation 1.连接步骤: 1)打开secureCRT,点击+ 新建一个连接 2)按照流程一步一步配置 ...

  2. openstack搭建之-horizon配置(14)

    一.ctrl控制节点安装horizon #安装软件yum install openstack-dashboard -y vim /etc/openstack-dashboard/local_setti ...

  3. 虚拟机系统安装Messenger和Server

    YCD对支持虚拟机运行Messenger和Server, 不论用哪种虚拟机安装, 请保证: 确认DirectX和Direct 3D组件已经开启 为虚拟机分配显卡计算资源 如果不满足以上条件, 虚拟机上 ...

  4. IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别参考

    参考https://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral IO复用,AI ...

  5. 二、IIS部署WebApi

    一.项目发布 二.hosts 更改 C:\Windows\System32\drivers\etc 三.网站搭建 之后我将端口默认更改 8001   以防与80端口冲突 注意: 1.先测试IIS的lo ...

  6. 微言netty:不在浮沙筑高台

    1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建 ...

  7. OTZ%%%子谦。大佬

    又上了节课...俩题 计算系数    组合数问题... 要不是大佬指点就只能阶乘暴力算了 (主要还是我忘了杨辉三角) 杨辉三角与组合数C有着千丝万缕的联系,在计算,使用方面相当方便. 先说计算系数 计 ...

  8. AutoMapper入门使用

    AutoMapper入门使用 在应用开发的过程中,首先要了解整个系统中各个系统的组件的作用,然后了解系统的工作流(workflow),最后需要梳理一遍数据流(dataflow),而在整理数据流的过程中 ...

  9. 洛谷P3806 点分治

    点分治 第一次写点分治..感觉是一个神奇而又暴力的东西orz 点分治大概就是用来处理树上链的信息,把路径分成过点x和不过点x的两种,不过点x的路径可以变成过点x的子树中一点的路径,递归处理 #incl ...

  10. MT【313】特征方程逆用

    已知实数$a,b,x,y$满足\begin{equation}\left\{ \begin{aligned} ax+by &= 3 \\ ax^2+by^2&=7\\ ax^3+by^ ...