C++入门篇三
引用:&
&放在左边就是引用,放在右边就是取地址
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++入门篇三的更多相关文章
- 【SSRS】入门篇(三) -- 为报表定义数据集
原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]
三.使用Azure AD管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信息 ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.5 Delete删除用户]
3.5 Delete删除用户 删除也是通过ObjectID获得对象进行删除 [Authorize] public async Task<ActionResult> Delete(strin ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.4 Edit修改用户信息]
3.4 Edit修改用户信息 我们用FormCollection简化了表单提交,非常方便的进行用户信息修改. [HttpPost, Authorize] public async Task<Ac ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.3 Details用户详细信息]
3.3 Details用户详细信息 用户详细信息是通过objectId获取.代码如下 public async Task<ActionResult> Details(string obje ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.2 Create创建用户]
3.2 Create创建用户 [HttpPost, Authorize] public async Task<ActionResult> Create( [Bind(Include = & ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.1 Index用户列表]
3.1 Index用户列表 或许当前域下的用户列表 [Authorize] public async Task<ActionResult> Index() { var userList = ...
- Android攻城狮学习笔记—入门篇三
第十章 CheckBox 与其他控件类似 有自己的监听方法 实现监听 并定义被选中或取消后的操作 第十一章 RadioGroup和RadioButton RadioGroup是RadioButton的 ...
- 【SSRS】入门篇(四) -- 向报表添加数据
原文:[SSRS]入门篇(四) -- 向报表添加数据 定义好数据集后 [SSRS]入门篇(三) -- 为报表定义数据集 ,就可以开始设计报表了,将要显示在报表的字段.文本框.图像和其他项从工具箱拖放到 ...
随机推荐
- WSL、Git on Windows 、Putty等的创建的rsa秘钥与连接linux的使用。
1. 在windows 上面可以使用多种方式创建公钥和私钥 这里从一开始说: 1.1 windows subsystem linux 的方式最简单了 cmd 命令行 下 进入 WSL 输入命令 bas ...
- 搭建Android手机服务器(一)
自从上学期的软件工程课之后,我们团队设计的抢答器一直想把服务端移到移动端.所以,我一直在考虑如何把手机作为一台服务器.今天我主要讲解一下,对于没有android真机只有模拟器的,如何设置模拟器,使得在 ...
- Python——hashilib 模块(哈希模块)
hashilib 模块 摘要算法 import hashlib # 提供摘要算法的模块 md5 = hashlib.md5() md5.update(b'alex3714') print(md5.he ...
- MIUI9 解锁并刷入TWRP后,删除解锁密码
如果因为某种原因导致解锁密码失效(比如刷了其他ROM),还原备份回来之后,解锁密码失效了. 那么可以进入TWRP,然后通过 adb shell 进入\data\system\文件夹 用rm命令删除g ...
- Magento 2 Error: A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.
有时在Magento上进行调试会很烦人,特别是如果出现了一些问题,而不是在你实际编写代码时. 这是Magento管理面板上发生的事情.截至目前,它可能是三个原因之一,让我们讨论一下: 1.管理员密码 ...
- [欢乐向]JavaScript之如何逼疯你的同事
https://javascript.info/ninja-code
- Ubuntu和Windows双系统的安装
本菜鸡的ACM生涯大概是结束了 最有希望的EC和焦作也顺利的铁了,一路走来还是怪自己不努力,整日整日的划水,算了,铁牌退役,也是自己应有的惩罚,静下心来吧 下面介绍如何装windows10和Ubunt ...
- ElasticSearch6.5.0 【Java客户端之REST Client】
说明 High Level Client 是基于 Low Level Client 的.官方文档如下: * https://www.elastic.co/guide/en/elasticsearch/ ...
- beanPostProcessor与beanFactoryPostProcessor
BeanFactoryPostProcessor的典型应用:PropertyPlaceholderConfigurer BeanFactoryPostProcessor会在所有的bean配置载入之后执 ...
- HDU 5968(异或计算 暴力)
题意是在一个数列中找到一段连续的子串使其异或值与所给值最接近,求出子串长度,若有多组结果,输出最大长度. 做题之前一定多注意数据范围,这道题就可以直接暴力,用数组 p[ i ][ j ] 表示长度为 ...