本文主要是谭浩强老师c++教材第三版第五章的小结。
重要参考:http://www.runoob.com/cplusplus/cpp-arrays.html
C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
(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}
(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}}
(1)如果函数实参是数组名,形参也应是数组名,且类型一致;
(2)数组名代表数组首元素的地址,并不代表数组中的全部元素,因此用数组名作实参时,不是把数组各元素的值都传给形参,而是将数组首元素的地址传给形参,此时相当于实参与形参共同占用了一段地址,如果形参元素值改变时,实参也会被改变。这是不同于其他变量作参数时,形参变了不影响实参。
(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'
(1)字符串变量的定义和引用
使用字符串变量使,首先在头文件加上:#include
字符串变量的定义: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