博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
06-引用
阅读量:5807 次
发布时间:2019-06-18

本文共 1919 字,大约阅读时间需要 6 分钟。

写在前面

我们经常使用#ifndef、#define、#endif来防止头文件的内容被重复包含◼#pragma once可以防止整个文件的内容被重复包含◼区别#ifndef、#define、#endif受C\C++标准的支持,不受编译器的任何限制有些编译器不支持#pragma once(较老编译器不支持,如GCC 3.4版本之前),兼容性不够好#ifndef、#define、#endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件复制代码

名词解释

◼ 在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值 ◼ 在C++中,使用引用(Reference)可以起到跟指针类似的功能◼ 注意点 引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用) 对引用做计算,就是对引用所指向的变量做计算在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终” 可以利用引用初始化另一个引用,相当于某个变量的多个别名 不存在【引用的引用、指向引用的指针、引用数组】◼ 引用存在的价值之一:比指针更安全、函数返回值可以被赋值接下来我们再来const--下一讲会专门来讲 字段(ios开发者不会陌生),常引用,数组的引用,表达式的引用复制代码

常引用const

将main.m 改为mian.mm 文件(以后若是同样的操作,将不再赘述)◼ const是常量的意思,被其修饰的变量不可修改 如果修饰的是类、结构体(的指针),其成员也不可以更改◼ 引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用 const必须写在&符号的左边,才能算是常引用◼ const引用的特点 可以指向临时数据(常量、表达式、函数返回值等) 可以指向不同类型的数据 作为函数参数时(此规则也适用于const指针)✓ 可以接受const和非const实参(非const引用,只能接受非const实参)✓ 可以跟非const引用构成重载◼ 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量int a = 20;int &page = age;其中page就是一个引用const 也是老生常谈的问题int a = 20;const int *page = age;page 被 const修饰,则page不可改变了,就是固定的值了int a = 10;int *p = &a;*p = 30;cout << a << endl;打印结果:30复制代码

数组引用

int array[] = { 10, 20, 30 };int (&rArray)[3] = array;cout << array << endl;cout << &rArray << endl;打印结果0x7ffeefbff54c0x7ffeefbff54c在函数调用,需要传入数组参数时,就可以传入引用void testArray(int (&array)[3]){    cout << "size:" << sizeof(array) << endl;    for (int i = 0; i < sizeof(array)/4; i++)    {        cout << array[i] << endl;    }}//sizeof 计算对象的大小 是字节为单位的, sizeof(array)/4 就是有多小个int 数据int array[] = { 10, 20, 30 };testArray(array);打印结果:size:12102030复制代码

再举几个?(枚举,结构体)

enum Season {    Spring,    Summer,    Fall,    Winter};struct Student {    int age;};Season season;Season &rSeason = season;rSeason = Winter;cout << season << endl;    Student stu;Student &rStu = stu;rStu.age = 20;cout << stu.age << endl;看下打印结果:320复制代码

装逼一下

引用的本质◼ 引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针◼ 一个引用占用一个指针的大小 复制代码

完整代码demo,请移步GitHub:

当然C++大神就绕吧,非喜勿喷,毕竟这是个人的学习笔记?

转载地址:http://doubx.baihongyu.com/

你可能感兴趣的文章
Log4Net 配置说明
查看>>
MSSQL和oracle数据通讯
查看>>
MVC内容background-image: url('')问题
查看>>
springboot~rabbitmq的队列初始化和绑定
查看>>
Working with SharePoint’s Discussion Lists Programmatically – Part 1
查看>>
二维子数组和的最大值
查看>>
dl以及dt,dd,以及table的tr,th,td最清楚分析
查看>>
瓣数字阅读计划上线 作者可直接获取收益
查看>>
phpcms V9实现wap上一篇、下一篇功能
查看>>
phpcms v9 wap内容页内容显示方法
查看>>
jQuery异步提交与JSON解析
查看>>
第七次作业--项目需求分析(团队)
查看>>
nsoperation
查看>>
GET和POST
查看>>
html5 audio组件禁止下载
查看>>
VC6无法生成Release版本程序
查看>>
Nonlinear Component Analysis as a Kernel Eigenvalue Problem
查看>>
dubbo监控报错Error creating bean with name 'uriBrokerService'
查看>>
QTP的那些事--灵活运用其中的datatable对象
查看>>
常用的STL查找算法
查看>>