数组是一种复合类型,由类型名+数组名+维度组成。

数组定义中的类型能够是C++基本内置类型。也能够是类类型的。数组元素的类型能够是除了引用类型以外的其它不论什么类型。没有全部的元素都是引用的数组。

数组的维度必须是大于或等于1的编译器常量,所谓的编译器常量就是指在编译期间就可算出结果的表达式。字面值常量,枚举类型,用常量表达式初始化的const对象。不论什么在编译器无法计算出的值都不可作为数组的维度值。

无论数组在哪里定义。假设其元素是类类型的,则自己主动调用类的默认构造函数进行初始化。假设该类没有默认的构造函数,那就必须显式的初始化全部元素。

字符串字面值的结尾处有一个null(‘\0’)来标识字符串的结束。非常多C风格的库函数都是工作原理都是靠这个null来工作的,比方字符串的比較,赋值,连接等。

字符串字面值的数据类型是const char *类型。

能够使用字符串字面值来初始化字符数组。

Char ca1[] = {‘C’,‘+’。‘+’};

Char ca2[] = {‘C’,‘+’,‘+’。‘\0’};

Char ca3[] = “C++”;这三种定义方式都是合法的,对三个变量sizeof操作。sizeof在C++中是一个操作符,不是函数,尽管有一个括号。

Sizeof(ca1)= 3; sizeof(ca2) = 4; sizeof(ca3) = 4;

Ca3是一个非常特殊的情况,由于字符串字面值初始化缺省默认维度的字符数组时后面会自己主动补null。

Char ca4[3] = “C++”;就不正确。

对ca2,ca3进行strlen求字符串长度操作,得到的结果均为3。由于strlen的工作原理就是从给定字符串的起始位置计数。直到在后面遇到一个null为止。

对于ca1是一个例外了,由于ca1作为字符串时,其结尾没有null。所以strlen求不出预期的值。

数组不同意被复制和赋值。在vector中vector::size_type为其下标类型。在数组中size_t为其下标类型。

假设类的成员为数组类型,在合成的复制或赋值成员中,编译器是把数组复制(赋值)了。

在C和C++中。在语言设计之处为了最求效率,不正确数组的下标进行检測。有些编译器可能会做了扩展,对其检測。但这是不利于跨编译器移植的。比方array[-1]。编译器可能不会抛错。

&符号的正确读法:取地址。

其仅仅能作用于左值身上(由于右值引用不清楚语法,在此抛开右值引用情况)。

*在作为指针方面使用方法的正确读法:解引用,当然它还有乘号的使用方法。

声明指针的两种风格,int
 *pi; int*  pi;这两种风格各有优劣,关键在坚持使用当中的一种。

后一种easy出现的错误是:int* pi,i2;在这一句代码里,pi是一个指针。而i2则是一个整型变量,在这一点上第一种写法更靠谱。

C++在编译期无法得知指针是否被初始化,以及指针所指向的区域是否是和预期的一致。

好的实践是不要尽早的定义指针变量,定义之处就初始化为0,编译期能够检測出0值的指针是并未指向不论什么对象的。

0值,或是编译期可获得值为0的const量都能够用来初始化指针。除了这两个外,也能够使用从C语言中继承下来的NULL宏定义,在编译期会自己主动替换成0值。当然另一个对象的地址更是能够。

Int zero = 0; const int czero = 0;

int *pi = zero;是错误的;

int *pi2 = czero;倒是正确的。

指针仅仅能初始化或赋值为同类型的变量地址或还有一个指针(在这里接受的是地址范畴,和上一个条款不冲突)。但有两个例外:

void*指针能够接受不论什么其它类型的变量地址,仅仅是其同意在函数传參和返回,以及指针的赋值和比較上。不同意使用void*指针来操作其所指向的对象。还有就是在类的继承体系内。父类的指针能够接受子类的对象地址。

引用和指针的差别

1:引用定义之处就要初始化,且引用关系一直存在。

2:给引用赋值改动的是引用所关联对象的值,指针确实在改动指针的指向了。

C++Primer学习笔记《2》的更多相关文章

  1. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  2. C++ Primer学习笔记(二)

    题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接  C++ Primer学习笔记(一)   27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  5. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  6. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  7. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  8. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  9. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

  10. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. 隐藏系统EFI分区Z盘

    找到C:\Windows\System32\cmd.exe程序, 右键单击cmd 选择以管理员身份运行, 打开命令提示符,输入以下命令(不区分大小写)DiskPart回车List空格volume回车s ...

  2. 【Linux】apt-get install 怎么阻止弹出框,使用脚本默认自动安装?

    You can do a couple of things for avoiding this. Setting the DEBIAN_FRONTEND variable to noninteract ...

  3. 转:windows BAT 批处理脚本教程

    转自:http://www.cnblogs.com/mq0036/p/3412171.html BAT 批处理脚本教程 第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文 ...

  4. java调用机器上的shell脚本

    java调用机器上的shell脚本,可以这样方便的通过shell脚本调用本机的C.C++等程序 Process process = null; Runtime runTime = Runtime.ge ...

  5. 【转】Android一些知识点汇总

    Android常用知识点总汇 一.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由. 如果在你的android系统上安装了多种浏览器,能否指定某浏览器访问指定页面?答案当然是:肯定的. ...

  6. Android TabHost控件 右侧留空并增加按钮

    涉及公司内部程序,部分地方进行模糊处理. 公司Android程序的一个子程序UI要进行改版,最初的UI添加按钮是在内容区,而且TabHost空间是正常的标题平均分布.如下图(其实这是改版的第一版,没有 ...

  7. win10下JDK安装,配置环境变量后出现error:could not open '...jvm.cfg'

        分析: 大多是安装jdk的时候在注册表里注册过,打开注册表查看里面如下三个文件( Java Development Kit,Java Plug-in,Java Runtime Environm ...

  8. BitConverter.GetBytes(int)和BitConverter.ToString 方法 (Byte[])

    BitConverter.ToString 方法 (Byte[]) 网址:https://msdn.microsoft.com/zh-cn/library/3a733s97(v=vs.110).asp ...

  9. 演示程序之打游戏 -- 慕司板IAP15

    上位机和协议制定我的大学舍友(他的微博:http://weibo.com/lesshst? topnav=1&wvr=5&topsug=1)毕业前百忙之中使用Python花了一个下午完 ...

  10. HDOJ 3944 DP?

    尽量沿着边走距离最短.化减后 C(n+1,k)+ n - k, 预处理阶乘,Lucas定理组合数取模 DP? Time Limit: 10000/3000 MS (Java/Others)    Me ...