【C++学习笔记】六、C++的一维数组、多维数组、字符串数组以及字符串类型(string)

本文主要是谭浩强老师c++教材第三版第五章的小结。

重要参考:http://www.runoob.com/cplusplus/cpp-arrays.html

C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

1. 一维数组

(1)定义:类型名 数组[常量表达式] 

注意:

首先,数组定义时i,方括号中的数或者表达式代表数组元素的个数,如:int a[10]; 表示数组有10个元素,这10个元素的下标是0到9,引用的时候最大到9,但是定义时候一定要写为10;

其次,方括号中的常量表达式可以是常量、常变量和符号常量,不能是变量,例如不能根据输出的大小定义数组,数组在定义时,大小必须被指定,如:

典型的错误写法:

//以下写法错误
int n;

cin>>n;

int a[n];

应改成:

//正确写法
const int n = 5;
int a[n];

(2)引用:数组名[下标]

如a[0],a[1].a[5]等等

(3)初始化

a. 对全部元素赋值,此时可以指定长度或不指定长度:

如:

int a[5] = {1,2,3,4,5}

int a[] = {1,2,3,4,5}

b. 对部分元素赋值,此时只有前边几个值有初值,后边默认为0:

int a[5] = {1,2,3}

2. 二维数组

(1)定义:类型名 数组名[常量表达式][常量表达式]

如:int a[3][4] 表示三行四列的数组,定义和引用同一维数组,需要注意的是,元素存放方式是先存放行再存放列

(2)引用:数组名 [下标][下标]

如:a[2][0],数组元素既可以是左值,也可以出现在表达式中

(3)初始化

a. 按行全部初始化:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}

b. 直接全部初始化,此时第一维度可以省略,第二维度不能省略

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}

int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}

c. 对部分元素初始化,此时也是先给前边的元素赋值

int a[3][4] ={{1},{5},{9}}

3.数组作函数参数

(1)如果函数实参是数组名,形参也应是数组名,且类型一致;

(2)数组名代表数组首元素的地址,并不代表数组中的全部元素,因此用数组名作实参时,不是把数组各元素的值都传给形参,而是将数组首元素的地址传给形参此时相当于实参与形参共同占用了一段地址,如果形参元素值改变时,实参也会被改变。这是不同于其他变量作参数时,形参变了不影响实参。

4. 字符数组

(1)定义和初始化

字符串数组的定义和初始化与之前的数组相似,只是类型变为了char,其他规则都适用,如:

char c[5] = {'C','h','i','n','a'}

(2)赋值和引用

字符数组赋值时要注意,只能对元素赋值,不能对整个数组赋值,如:

错误写法如下:


//错误写法
char c[5];
c = {'C','h','i','n','a'};

正确写法:

char c[5];
c[0]='C';c[1]='h';c[2]='i';c[3]='n';c[4]='a';

引用时相同,也不能把字符串数组整体引用了,只能引用逐个元素

(3)字符串结束标志

如 char c[5] 数组,它的有效长度是5,但是求出的长度是6,因为系统自动给字符串规定了结束标志'\0',占据一个字符长度。

(4)字符数组的输入和输出

a. 逐个字符输入输出:

如:char c[20];

       cout << c[2];

b. 全部字符输入输出:

char c[20];

cin >> c;

cout << c;

(5)字符串函数

a. 字符串链接函数strcat:

strcat(string1,string2)

将第2个字符串连接到第1个字符串后边

b. 字符串复制函数strcpy:

strcpy(string1,string2)

将第2个字符串复制到第1个字符串中,将第一个字符串覆盖,若第二个字符串短,也会用其后自动补得0将第一个字符串覆盖,也就是将第一个字符串完全变为第二个。

c. 字符串比较函数strcmp:

strcmp(string1,string2)

如果str1>str2,结果为正数,等于为0,小于为负数

d. 字符串长度函数strlen:

strlen(str)

求字符串的有效长度,不包括'\0'

5. 字符串类型(string)

(1)字符串变量的定义和引用

使用字符串变量使,首先在头文件加上:#include <string>,否则会报错;

字符串变量的定义:string str1;可理解为相当于一个string类型

赋值:string str2= "China";

输入输出:cin >> str1;

(2)字符串变量的运算

a. 字符串复制直接使用赋值号即可:

如:string1 = string2;作用与strcpy一样

b. 字符串连接用加号:

string str1 = "C++";

sring str2 = "Language";

str1 = str1+str2;

输出的str1为"C++Language"

c. 字符串比较直接用==、>、<等即可

(3)字符串数组

可以简单理解为字符串类型的数组:

定义为:string str[5] = {"Zhang","Li","Sun","Wang","Tan"};

一个字符串数组包含若干个字符串,每个字符串可以看做为一个元素,同时不要求字符串元素具有相同的长度,具体例子可见习题14与17,链接如下:https://blog.csdn.net/zl3090/article/details/85055600

猜你喜欢

转载自blog.csdn.net/zl3090/article/details/85076381