目录
1.数组
是一种用于存储多个同类型的值的数据格式。
例如,数组可以存储30个int类型的值,其中,每个值都存储在一个独立的数组元素中,在计算机内存中依次存储数组中的各个元素。
1.1数组的声明
声明数组的通用格式为:
typeName arrayName [arraySize];
其中 typeName 是这组元素的数据类型,arrayName 是数组名,arraySize 是元素数目,它必须是整型常数(如 10)或 const 值,也可以是常量表达式(如 3*5 )。
我们可以单独访问数组元素,方法是使用下标或索引来对元素进行编号。C++数组从0开始编号,并且使用带索引的方括号表示法来指定数组元素。例如,我们声明创建一个名为 ragnar 的 int数组,该数组有7个元素:int ragnar[7];,则ragnar[0] 是ragnar数组的第一个元素,ragnar[6]是最后一个元素(参考下图),最后一个元素的索引比数组长度小 1。
注意:编译器不会检查使用下标是否有效,但在运行程序后,这种赋值可能引发问题,也可能导致程序异常崩溃。所以必须确保程序只使用有效的下标值。
1.2数组的初始化规则
① C++允许只有在定义数组时,才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组。
int cards[4] = {3,6,8,10}; //成功初始化
int hand[4]; //创建数组,未初始化
hand[4] = {5,6,7,8} //语法错误
hand = cards; //语法错误
② C++可以使用下标分别给数组中的元素赋值。
int hand[4]; //声明创建hand数组
/* 使用下标给数组元素赋值 */
hand[0] = 5;
hand[1] = 6;
③ 如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0。
int arr[10] = {1,2,3}; //部分初始化
/* 意味着arr[3]~arr[9]的值均为 0 */
/*等价于*/
int arr[10] = {1,2,3,0,0,0,0,0,0,0};
/*将数组中所有元素都初始化为0*/
int arr2[10] = {0};
2.结构体
虽然数组可以存储多个元素,但所有的元素的类型都必须相同。结构是一种比数组更加灵活的数据格式。
2.1定义结构
假如现在需要一种类型应存储产品的名称、容量和售价,那么我们就可以定义结构来满足需求:
struct product
{
char name[20]; //名称
flaot volume; //容量
double price; //售价
};
关键字 struct 声明,这段代码定义的是一个结构,标识符product 是结构的名称。
name、volume、price 是结构体的成员,由大括号括起来,最后以分号结束结构声明。
2.2结构初始化
和数组一样,使用由逗号分隔值列表 ,并将这些值用花括号括起来。
product guest =
{
"Glorious" , //产品名
1.88, //容量
29.99 //价格
};
/*也可以将他们全部放在一行中*/
product guest = {"Glorious" ,1.88,29.99};
2.3结构数组
也可以创建元素为结构的数组
例如,要创建一个包含一个10个 product 结构的数组,可以这样做:
product gifts[10];
这样便定义了一个product 结构数组,其中的每个元素(如 gifts[0] 或 gifts[9])都是 product 的对象,可以与成员运算符一起使用:
cin >> gifts[0].volume;
cout << gifts[8].name;
注意:gifts本身是一个数组,而不是结构,所以像gifts.price 这样的表述是错误的。
以下代码是一个运用结构数组的简例:
#include<iostream>
using namespace std;
struct Person {
char name[20]; //姓名
char sex[4]; //性别
int age; //年龄
};
int main() {
/*初始化*/
Person person[2] = {
{"张三","男",20},
{"李四","女",19}
};
for (int i = 0; i < 2; i++) {
cout << "第 " << i + 1 << " 个人的信息:" << endl;
cout << "姓名:" << person[i].name << endl;
cout << "性别:" << person[i].sex << endl;
cout << "年龄:" << person[i].age << endl;
cout << "----------------------------------" << endl;
}
system("pause");
return 0;
}
运行结果如下: