引用:&

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

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(); }

最新文章

  1. Hibernate 查询方式(HQL/QBC/QBE)汇总
  2. Android Studio使用百度地图示例BaiduMapsApiASDemo
  3. 创业这三年¥.NET之尴尬处境
  4. Linux 下一个很棒的命令行工具
  5. Android Material Design-TabLayout的使用
  6. URAL 2037 Richness of binary words (回文子串,找规律)
  7. Java高级--Java线程运行栈信息的获取 getStackTrace()
  8. c++,基类声明的指针变量和引用类型变量可以指向派 生类的对象
  9. 年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福利有干货) 关键词:7000万用户、五星级厨师、住房补助 - V2EX
  10. java201521123118《java程序设计》第5周总结
  11. 牛客小白月赛13-J小A的数学题 (莫比乌斯反演)
  12. freeswitch reloadxml 出错
  13. 【RabbitMQ】3、win7下安装RabbitMQ
  14. linux调度器源码分析 - 概述(一)
  15. OCM_第五天课程:Section2 &mdash;》AGENT 的安装 、GC 的使用
  16. Linux - 用户操作
  17. 安装rocketmq-console
  18. Zigbee系列(路由机制)
  19. java 多线程3:Thread类中的静态方法
  20. Java logger组件:slf4j, jcl, jul, log4j, logback, log4j2

热门文章

  1. React16.x特性剪辑
  2. Dictionary实现先进先出代替Queue
  3. Leetcode 88. Merge Sorted Array(easy)
  4. 用bisect维护一个排序的序列
  5. windows服务器nginx+php启动开源ecshop
  6. php之swoole安装与基本使用
  7. 通过FactoryBean配置Bean
  8. 记一次innobackupex备份恢复数据库过程
  9. 时间插件--daterangepicker使用和配置详解
  10. CF24D Broken robot