C++ 一些笔记
1、指针、引用和const
int i=;
int &a = i;
int *p ;
int *&r=p;//r是对指针的引用
r=&i;//实质上是将p指向i
*r=;//实质上是将i的值变为0;
a =;
引用实质上是对变量起个别名,它本身不是一个对象,只是与初始值绑在一起。因此他定义的时候必须初始化,且不能更换到其他对象,也不存在引用的引用。普通的“非常量引用“只能引用一个对象,不能引用一个常量,用const限定的“常量引用”可以引用一个常量,也可以引用一个普通变量。(这里“常量引用”只是一个对const的引用的简称,实际上不存在常量引用,因为引用不是一个对象)
int i =;
const int &a = i;
i = ;//这句话是对的。并且a的值也会跟着变了
a =//这句话是错的。
cout<<a;
指针本身是一个对象,因此可以复制和赋值,且可以指向不同的对象,指针定义的时候可以不初始化,也就是可以为空。可以有指向指针的指针。
存在指针的引用 ,不存在指向引用的指针。 指针是一个对象因此存在常量指针。如下:
const int *p = &i;//指向常量的指针
int const *p = &i;//效果上面一样
int *const q = &i;//常量指针 *p = ;//错误,p指向的是常量不能更改。
p = &c;//正确,p的地址可以换
*q = ;//正确
q = &c;//错误,p的地址不能更改。
2、指针形参,数组形参,引用形参
指针的行为跟其他非引用类型一样,当执行指针拷贝操作时,拷贝的是指针的值,拷贝之后两个指针不是一个指针。
void fun(int *p){
*p=;
p=;
}
int i =;
int *p = &i;
cout<<p<<endl<<*p<<endl;
fun(p);
cout<<i<<endl<<p<<endl<<*p;
输出结果

可以看出指针的值改变了,但是指针本身没有改变。
引用形参,其实就是一个引用,操作的还是其本身,因此在函数中改变其值,函数外也改变。因为都是自己。
数组形参,不允许拷贝数组,数组将转换成指针。我们实际上传递的是数组首元素的指针。
2、extern 和 static、const
C++ 一些笔记的更多相关文章
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
随机推荐
- 转: Hibernate HQL查询 插入 更新(update)实例
1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...
- dede日期时间标签调用大全
dedecms最强大的功能就是调用标签,可以变换出各种样式的文章形式出来,本节将DEDECMS调用时间的样式做一个总结,基本所有的时间调用样式都有了,日期时间格式 (利用strftime()函数格式化 ...
- (转载)jQuery 1.6 源码学习(二)——core.js[2]之extend&ready方法
上次分析了extend方法的实现,而紧接着extend方法后面调用了jQuery.extend()方法(core.js 359行),今天来看看究竟core.js里为jQuery对象扩展了哪些静态方法. ...
- Uart、SPI和I2C的区别
串口通信:UART.SPI.I2C区别[引用] 1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面 ...
- 多线程的学习与python实现
学习了进程与线程,现对自己的学习进行记录. 目录: 一.进程与线程的概念,以及联系与区别 二.多线程 三.python中多线程的应用 四.python实例 五.参考文献 一.进程与线程的概念.以及联系 ...
- map的四种遍历方式
map是Java中非常常用的一种数据结构,但map不同于set和list都继承自Collection接口. 所以map没有实现Collection的Iterator 方法,自身没有迭代器来遍历元素. ...
- iOS UITableView 引起的崩溃问题
其实 UITableView 应该是在iOS开发中使用最频繁的一个控件,一次同事之间聊天玩笑的说“一个页面,要是没使用UITableView,就好像称不上是一个页面”.虽然是个最常见的控件,但是他的强 ...
- 利用calc计算宽度
width:calc(100% - 40px)可用 + - * / 进行计算(ie9+) 注:计算符号前后必须跟上空格.
- C#同一项目中不同文件或类中的方法进行调用
有两种方法,一是将被调用的类设置成静态类Static,这样就可以直接点出来了,二是将被调用的方法所在类设置成public,这几必须在调用类中先将被调用的类进行实体化,new()出来,再点出来. 一. ...
- Spring中的自动装配
src\dayday\Person.java package dayday;/** * Created by I am master on 2016/11/28. */public class Per ...