2017.11.11 复合类型

2.3 复合类型

2.3.1 引用

引用就是为对象起了个别名,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。

int ival =1024;

int &refVal= ival;          // refVal 指向ival (是ival 的另一个名字)

2.3.2 指针

指针是“指向”另外一种类型的复合类型。与引用不同,第一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针生命周期内它可以先后指向几个不同的对象。其二,指针无须在定义时赋值。在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

定义指针类型的方法将声明符写成*d的形式,其中d是变量名。

获取对象的地址

指针存放某个对象的地址,想要获取该地址,需要使用取地址符&。

int ival= 42;

int *p = &ival;          // p存放变量ival的地址,或者说p是指向变量ival 的指针

指针值

指针的值应属于下列4种状态之一:

1.指向一个对象。

2.指向紧邻对象所占空间的下一个位置。

3.空指针,意味着指针没有指向任何对象。

4.无效指针,也就是上述情况之外的其他值。

利指针访问对象

如果指针指向了一个对象,则允许使用解引用符(*)来访问该对象;

int ival = 42;

int *p= &ival;               //p存放变量ival的地址

std::cout<<*p;            //由符号*得到指针p所指的对象,输出42.

对指针的解引用会得出所指对象,因此如果给解引用的结果赋值,实际上也就是给指针所指的对象赋值;

*p=0;

cout<<*p;  //输出0

空指针

空指针不指向任何对象,以下列出生成空指针的方法;

int *p = nullptr;

int *p = 0;

int *p = NULL;          //需要首先#include <cstdlib>

void*     指针

void* 是一种特殊的指针类型,可用于存放任意对象的地址。

double obj = 3.14 , *pd= &obj;

void *pv=&obj;

pv=pd;

利用void* 指针能做的事比较有限:拿他和别的指针比较、作为函数的输入或输出,或者赋给另一个void*指针。

指向指针的指针

**表示指向指针的指针,***表示指向指针的指针的指针。

int ival=1024;

int *pi=&ival;

int **ppi=&pi;

时间: 2024-10-07 14:36:17

2017.11.11 复合类型的相关文章

2017.11.11 B201 练习题思路及解题方法

2017.11.11 B201 练习题思路及解题方法 题目类型及涵盖知识点 本次总共有6道题目,都属于MISC分类的题目,涵盖的知识点有 信息隐藏 暴力破解 音轨,摩斯电码 gif修改,base64原理 序列密码 各题的解题思路及过程 签到题:隐写诶.jpeg[知识点:信息隐藏] 本题为 隐写诶.jpeg 的图片文件,可以对该文件尝试一些基本的图片隐写解题思路,如将文件后缀名由 .jpeg 更改为 .txt 后利用记事本打开,或直接对文件点击右键后 打开方式→记事本打开,在打开的记事本窗口中获得

初窥C++11:自动类型推导与类型获取

auto 话说C语言还处于K&R时代,也有auto a = 1;的写法.中文译过来叫自动变量,跟c++11的不同,C语言的auto a = 1;相当与 auto int a = 1;语句. 而C++11的auto是有着严格的类型推导出来的.以前是这么写 int a = 1; 现在,编译器知道a是int型了.所以可以这么写 auto a = 1; 对于类型比较长的,如vector<string>::iterator这类的,能少敲些字符了. 如果仅仅就这点作用,那么对编程实在没什么太大的益

2017.6.11 校内模拟赛

题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小copy一下排个序 用两个指针维护两个数组(原数据 和 排序后的数据), 即分为1数据和2数组 将小于1指针指向的数据的2数组中的数据全部压入栈中 后进行消除, 将栈栈顶元素与当前1数组中的1指针指向的元素进行比较 相同则消除 后重复过程 直至指针超过N 后判断一下是否两个指针都超过了N... #incl

2017年11月11日软考网络工程师案例分析真题及答案解析

[徐朋出品,必属精品]软考徐朋老师全网最先发布2017年11月11日软考网络工程师案例分析真题及答案解析,是全网最清新版本.详细讲解了2017年11月11日最新开考的软考网络工程师案例分析真题及答案.课件中对每一道真题都进行了详细的解析讲解,考后几周是学员记忆答案的最关键时间点,第一时间发布真题及答案帮助广大考生准确评估自己的考试结果及对未来参加考试的学员展示最新的考试趋势等.下载地址:http://down.51cto.com/data/2340424

2017年11月11日软考网络规划设计师案例分析真题及答案解析

[徐朋出品,必属精品]软考徐朋老师全网最先发布2017年11月11日软考网络规划设计师案例分析真题及答案解析,是全网最清新版本.详细讲解了2017年11月11日最新开考的软考网络规划设计师案例分析真题及答案.课件中对每一道真题都进行了详细的解析讲解,考后几周是学员记忆答案的最关键时间点,第一时间发布真题及答案帮助广大考生准确评估自己的考试结果及对未来参加考试的学员展示最新的考试趋势等.下载地址:http://down.51cto.com/data/2340406

2017年11月GitHub上最热门的Java项目出炉

2017年11月GitHub上最热门的Java项目出炉~ 一起来看看这些项目你使用过哪些呢? 1分布式 RPC 服务框架 dubbohttps://github.com/alibaba/dubbo Star 13970 本月上涨1666 ?wx_fmt=jpeg&wxfrom=5&wx_lazy=1 Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成.主要核心部件:Remoting: 网络通

第四章 复合类型

第四章  复合类型 4.1  数组 4.1.1  数组简介 数组(array)是一种数据格式,能够存储多个同类型的值. 声明数组的通用格式如下: typeName arrayName[arraySize]; 表达式arraySize指定数组的元素数目,它只能是以下三种情况之一: 1)        整型常数(如10,枚举值也可以): 2)        const值 3)        常量表达式(如8 * sizeof(int)) 注意:使用数组要注意下标的正确.编译器不会检查使用的下标是否有

C++Primer快速浏览笔记-复合类型

C++Primer2.3节介绍了两种复合类型:引用和指针 1.引用 引用并非对象,它只是为一个已经存在的对象所起的别名. 一旦初始化完成,引用将和它的初始值对象一直绑定在一起,不能重新绑定到另一个对象,因此引用必须初始化. 定义引用时,程序把引用和它的初始值绑定到一起,而不是将初始值拷贝给引用. 引用本身不是一个对象,所以不能定义引用的引用 引用只能绑定在对象上,而不能与字面值或者某个表达式的结果绑定在一起. 引用的类型必须和与之绑定的对象的类型严格匹配.但是有两种例外情况: 1.初始化常量引用

C++ Primer Plus(四)——复合类型

只能在定义数组时才能初始化,不能将一个数组赋值给另一个数组,但可以使用下标分别赋值给数组元素,但可以将一个string对象赋值给另一个string对象 如果只对数组的一部分初始化,其他元素自动设置为0 C++11可在初始化的大括号里不包含任何东西,这将把所有元素设置为0 C++11在数组列表初始化时,禁止缩窄转换 C-风格字符串以\0结尾,不是\0结尾的字符数组不是字符串 任何两个由空白(空格,制表符,换行符)分隔的字符串常量都将自己拼成一个 sizeof运算符指出整个数组的长度,而strlen