引用:&

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

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. 《React Native 精解与实战》书籍连载「React Native 源码学习方法及其他资源」

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React Native 源码学习方法及其他资源. 最后的章节给大家介绍 React Native ...

  2. python 项目自动生成requirements.txt文件

    主要使用目的: 任何应用程序通常需要设置安装所需并依赖一组类库来满足工作要求.通过requirements.txt可以一次性安装程序所需要和依赖的包. 为工程生成requirements.txt的两种 ...

  3. Mysql完整约束性

    一.介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY ...

  4. Electron桌面应用打包流程

    一. 准备工作 1.npm的安装需要下载node.js,安装完node.js之后npm自然会有. 参考链接:http://www.runoob.com/nodejs/nodejs-install-se ...

  5. NOIP2002普及组复赛B 选数

    题目链接:https://ac.nowcoder.com/acm/contest/230/B 题目大意: 略 分析: DFS模板题. 代码如下: #include <bits/stdc++.h& ...

  6. springmvc解决中文乱码问题

    1 第一种情况(get接收参数): 最近在用solr做一个搜索服务,发布给手机和pc等客户端调用,调用方式为:   http://www.ganbo.search/search?q="手机& ...

  7. 常用js方法整理(个人)

    开头总要有点废话 今天想了下,还是分享下自己平时积累的一些实用性较高的js方法,供大家指点和评价.本想分篇介绍,发现有点画蛇添足.整理了下也没多少拿得出手的方法,自然有一些是网上看到的个人觉得很有实用 ...

  8. Vue, React, AngularJS, Angular2 我们对流行JavaScript框架们的选择

    转自<奇舞周刊>,好文章mark一下 分割线 一个有趣的事实是:IBM发表的2017年最值得学习的编程语言名单中,JavaScript榜上有名.这位IT巨头指出,JS在网站中惊人地达到94 ...

  9. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  10. wxpython多线程通信的应用-实现边录音边绘制音谱图

    #!bin/bash/python # -*- coding=utf-8 -*- from __future__ import division import threading import wx ...