天天看点

C++入门(9)数组、字符串、指针

(1)初识数组

  • 数组,字符串,指针,这三个概念在C++中是毫不分割的关系。数组里可以包含各种各样的字符串,我们可以用指针去访问数组里的字符串。先从数组讲起吧。
  • 数组是一种数据格式,它也是一种值,但是它可以储存多个相同数据类型的常量(或变量)。
  • 声明数组时的三要素:储存在数组中的数据类型;数组名;数组中的元素数。例如:int months[6]。
  • 中括号内要指定元素数目,它必须是整型常数(如int),或者const值,也可以为常量表达式,如8 * sizeof(int)。它甚至可以不加任何数,如int apples[] = …
  • 我们可以单独访问数组。即使用下标或者索引对元素进行编号。数组是从0开始编号的,这和字符串有一点很类似,我们等会再说。也就是一个下标为6的数组,它的最后一个元素编号是5。
  • 下面这个程序可以帮我们理解数组的一些属性:
    C++入门(9)数组、字符串、指针
  • 程序首先创建了一个叫做apples的数组,其中有三个元素,所以编号依次为0,1,2。创建第二个数组cost时,C++允许在声明语句中初始化数组。可以看出来,数组就是一个用花括号括起来的数表。如果还未初始化数组,则其元素将不确定。接下来进行了一些运算,这是显而易见的。最后,sizeof运算符用于整个数组,得到的将是整个数组元素的字节数。如果用于单个元素,则返回的是单个元素的字节数。
  • 关于数组的初始化
  • 这么做是对的:int apples[4] = {1,2,3,4}; int apples[4]
  • 而这么做是错的:apples[4] = {1,2,3,4};(没有声明数组的数据类型) apples = pears;(数组之间不可以互相赋值)
  • 如果初始化数组时,数组内元素数量没有达到下标数,会怎么样呢?我们来试一下这一件事情:
    C++入门(9)数组、字符串、指针
  • 可以看到,所有未初始化的元素,编译器自动帮我们把它们设定为0。也就是说int apples[2] = {};这个数组中两个元素都是0。那我们突发奇想,如果输入元素多于下标数会怎么样?
    C++入门(9)数组、字符串、指针
  • 可以看到,编译器直接报错了。看来超过限度是一件危险的行为。

(2)初识字符串

  • 在介绍完数组之后,我们再来谈论一下字符串。
  • 字符串就是一系列的字符。C++有两种处理字符串的方式,一种是C风格的处理方式,这来自与C语言,学过C语言的同学可能相对来说更熟悉一些;一种是string类型的处理方式,我们下一节会谈到。字符串用来储存文本。
  • C风格字符串有一种特殊的性质:每个字符串结尾都以’\0’(空字符)结尾,而且,空字符占据了一个字节的内存。比如"Hello",一共五个字母,但它会占据六个字节,多出来的就是结尾的空字符。这是初学者非常要注意的问题,当确定字符串所需的字节数时,别忘记把结尾的空字符算在内!
  • 初始化字符串时可以这么做:char dog[11] = “My Belove”;也可以这么做:char dog[] = “My Belove”。中括号内的数字(下标)即为数组储存的最大的字节数,如果不写,则系统会自动为我们计算所需字节数。
  • 作为初学者,一定要区分字符常量(’ ',单引号内内容,只能是单个)和字符串("",双引号内容)。但注意“S”,是字符串。
  • 如何拼接字符串常量?如下:
cout << "I want to "
	"study." << endl;//第一种方法
	cout << "I want to\
\study." << endl;//第二种方法,注意第二个反斜杠必须在开头  
           
  • 下面我们看一个在数组里面使用字符串的程序。
    C++入门(9)数组、字符串、指针
  • 从这个程序可以看出,sizeof函数可以返回整个数组所占的字节数,而strlen函数返回的是储存在数组的字符串的长度,可以理解为这种关系:sizeof(array) = strlen(array) + 1。
  • 这个程序还使用索引来访问了数组中的元素,如name1[0]找到了name1中的第一个字母。name2[3] = ‘\0’,把name2的第四个字符设置为空字符,使字符串在第三个字符后面结束。
  • 后面我们还会讲到使用string来初始化数组,以及使用指针访问数组。

侵删

c++

继续阅读