c++数组易错点总结
c++数组
1、只有在定义数组是才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组
int cards[4] = { 3 , 6 , 8 , 10}; //ok
int hands[4] ; //ok
hand[4] = {5 , 6 , 7 ,9}; //error,只能在定义时初始化
hand = cards; //error,不能将一个数组赋给另一个数组 //数组名是常量
2、对于数组的下标,编译器不会检查使用的下标是否有效。
3、sizeof运算符返回类型或数据对象的长度(单位为字节)。注意,如果将sizeof运算符用于数组名,得到的僵尸整个数组中的字节数。但如果将sizeof用于数组元素,则得到的将是元素的长度(单位为字节)。
4、数组初始化:
初始化数组时可省略等号;
int cards[4] { 3 , 6 , 8 , 10}; //ok
可不在大括号内包含任何东西,这将把所有的元素都设置为0;
int cards[4]={}; //所有元素都设置为0
double hands[] {}; //所有元素都设置为0
列表初始化禁止缩窄转换。
long plifs[] = {25, 92, 3.0}; //不允许
char slifs[4] = {'h', 'i', 23, '\0'}; //不允许
5、用引号括起的字符串隐式地包括结尾的空字符,因此不用显式地包括它。
char bird[11] = "Mr. Cheeps"; //隐式地包括结尾的空字符,因此不用显式地包括它
char fish[] = "Bubbles"; //让编译器计算长度
6、在数组中使用字符串:sizeof运算符指出整个数组的长度,但strlen()函数返回的是存储在数组中的字符串长度,而不是数组本身的长度。另外,strlen()只计算可见的字符,而不把空字符计算在内。
7、指针和数组:
对数组应用sizeof运算符得到的是数组的长度,而对指针应用sizeof得到的是指针的长度,即使指针指向的是一个数组。
很多情况下,可以以相同的方式使用指针名和数组名。对于它们,可以使用数组方括号表示法,也可以使用解除引用运算符(*)。在多数表达式中,它们都表示地址。区别之一是,可以修改指针的值,而数组名是常量。
数组名被解释为其第一个元素的地址,而对数组名应用地址运算符时,得到的是整个数组的地址
short tell[10]; //声明一个20个字节的数组
cout << tell <<endl; //输出&tell[0],即第一个元素的地址
cout << &tell <<endl; //整个数组的地址
从数字上说,这两个地址相同;但从概念上说,&tell[0] (即tell)是一个2字节内存块的地址,而&tell是一个20字节内存块的地址。因此,表达式tell+1将地址值加2,而表达式&tell+2将地址值加20。
8、在cout和多数C++表达式中,char数组名、char指针以及用引号括起来的字符串常量都被解释为字符串第一个字符的地址。
相关知识:
- 如果给cout提供一个字符地址,则它将从该字符开始打印,直到遇到空字符为止。
- 用括号括起的字符串也应当是一个地址。在C++中,用引号括起的字符串像数组名一样,也是第一个元素的地址,这意味着对于数组中的字符串、用引号括起的字符串常量以及指针所描述的字符串,处理的方式是一样的,都将传递它们的地址。
- 字符串字面值是常量。
9、在C++中当且仅当用于函数头或原型中,int arr和int arr[]的含义才相同。在其他上下文中,int arr 和int arr[]的含义并不同。
int sum_arr(int arr[], int n)
int sun_arr(int *arr, int n)
int sum_arr(int arr[n]) //error,不要试图使用方括号表示法来传递数组长度
传递常规变量时,函数将使用该变量的拷贝;但传递数组时,函数将使用原来的数组。
c++数组易错点总结的更多相关文章
- JavaScript易错知识点整理
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- JavaScript 易错知识点整理
本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...
- Java五道输出易错题解析(避免小错误)
收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了. 1. 看不见的空格? 下面的输出会正常吗? package basic; public class Integ ...
- 细节!重点!易错点!--面试java基础篇(二)
今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...
- JavaScript易错点转载
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- PHP数据访问易错点(20161030)
易错点: 1.造对象的时候括号里面的参数 写错了 $db = new MySQLi("localhost","root","789",&qu ...
- *C语言有关指针的变量声明中的几个易错点
转至:http://my.oschina.net/ypimgt/blog/108265 Technorati 标签: 指针, typedef, const, define 我们都知道,至少听说过 ...
- Java五道输出易错题解析(进来挑战下)
转自:http://blog.csdn.net/lanxuezaipiao/article/details/41985243 收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注 ...
- js基础知识易错点(一)
最近替另一个项目招人,要求基础知识好,随便问了一些基础题,发现了一些易错的点,总结一下. 1.判断一个空数组 var arr = []; 1)JSON.stringify(arr) == " ...
随机推荐
- Flight学习(一)
翻看git时看到有新消息提示,点进去第一个就是Flight,那么今天就简单来翻译和了解一下这个框架吧,锻炼下自己的英文文档阅读能力,同时也熟悉下JavaScript.时间太赶,难免出现翻译失误和错误, ...
- 并行类加载与OSGI类加载
这回来分析一下OSGI的类加载机制. 先说一下OSGI能解决什么问题吧. 记得在上家公司的时候,经常参与上线.上线一般都是增加了一些功能或者修改了一些功能,然后将所有的代码重新部署.过程中要将之前的服 ...
- TCP:三次握手、四次握手、backlog及其他
TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数据都会经过数据的封装和解封的过程,流程如下图所示: 在 ...
- Java泛型学习
1.泛型的概念 泛型即"参数化类型",就比如我们定义方法的时候,定义一个变量,称为形参,变量值根据传进去的实参的值不同而改变.而泛型的出现,就是为了解决类型也能根据传进去的类型改变 ...
- 线程(java课堂笔记)
1.两种方式的差异 2.线程的生命周期 3.线程控制(线程的方法) 4.线程同步 5.线程同步锁 一. 两种方式的差异 A extends Thread :简单 不能再继承其他类了(Java单继承)同 ...
- C语言指针声明探秘
C语言指针声明探秘
- 让Chrome看不了WWDC直播的HLS技术详解
Requirements: Live streaming uses Apple's HTTP Live Streaming (HLS) technology. HLS requires an iPho ...
- .Net中的AOP系列之《AOP实现类型》
返回<.Net中的AOP>系列学习总目录 本篇目录 AOP是如何跑起来的 运行时编织 复习代理模式 动态代理 编译时编织 后期编译(PostCompiling) 来龙去脉 运行时编织 VS ...
- 测序分析软件-phred的安装
1.进入phred官网,给作者写信,获得所需的软件,大约需要两三天的时间即可收到回信. 2.根据作者的指示下载,解压相应软件. 3.以笔者本人的安装为例unbuntu系统(phred自带的instal ...
- (转) Unicode(UTF-8, UTF-16)令人混淆的概念
原文地址:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html 为啥需要Unicode 我们知道计算机其实挺笨的,它只认识010 ...