目录
二维数组就是在一维数组上,多加一个维度。
二维数组定义的四种方式:
数据类型 数组名[行数][列数];
数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
示例:
int main()
{
/*
数据类型 数组名[行数][列数];
数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
*/
//二维数组定义方式
int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 1;
arr[1][1] = 2;
arr[1][2] = 3;
//外侧循环打印行数
for (int i = 0; i < 2; i++)
{
//内侧循环打印列数
for (int j = 0; j < 3; j ++)
{
cout << arr[i][j] << "\t";
}
cout << endl;
}
cout << "******************************" << endl;
//2、定义方式2
int arr2[2][3] =
{
{1,2,3},
{1,2,3}
};
for (int i = 0; i < 2; i++)
{
//内侧循环打印列数
for (int j = 0; j < 3; j ++)
{
cout << arr2[i][j] << "\t";
}
cout << endl;
}
cout << "******************************" << endl;
//3、定义方式3
int arr3[2][3] = {1,2,3,1,2,3};
for (int i = 0; i < 2; i++)
{
//内侧循环打印列数
for (int j = 0; j < 3; j ++)
{
cout << arr3[i][j] << "\t";
}
cout << endl;
}
cout << "******************************" << endl;
//定义方式4
int arr4[][3] = {1,2,3,1,2,3};
for (int i = 0; i < 2; i++)
{
//内侧循环打印列数
for (int j = 0; j < 3; j ++)
{
cout << arr4[i][j] << "\t";
}
cout << endl;
}
system("pause");
return 0;
}
总结:二维数组定义可以省略行数,但不能省略列数。
查看二维数组所占内存空间
获取二维数组首地址
示例:
int main()
{
//二维数组名称用途
//1、可以查看占用内存空间大小
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组占用内存大小:" << sizeof(arr) << endl;
cout << "二维数组第一行占用内存为:" << sizeof(arr[0]) << endl;
cout << "二维数组第一个元素占用内存为:" << sizeof(arr[0][0]) << endl;
cout << "二维数组行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二维数组列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//2、可以查看二维数组的首地址
cout << "二维地址的首地址为:" << (int)arr << endl;
cout << "二维数组的第一行首地址为" << (int)arr[0] << endl;
cout << "二维数组的第一个元素的首地址为:" << &arr[0][0] << endl;
system("pause");
return 0;
}
考试成绩统计:
案例描述:有三名同学(张三、李四、王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩
语文 | 数学 | 英语 | |
---|---|---|---|
张三 | 100 | 100 | 100 |
李四 | 90 | 50 | 100 |
王五 | 60 | 70 | 80 |
示例:
int main()
{
//分数
int score[3][3] =
{
{100,100,100},
{90,50,100},
{60,70,80}
};
//记录总成绩
int addscores[3] = {0,0,0};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
addscores[i] += score[i][j];
}
}
//外循环是一个人的各科成绩
for (int i = 0; i < 3; i++)
{
switch (i)
{
case 0:
cout << "张三成绩为:\t";
break;
case 1:
cout << "李四成绩为:\t";
break;
case 2:
cout << "王五成绩为:\t";
break;
}
//内循环是这个人的每一科成绩
for (int j = 0; j < 3; j++)
{
switch (j)
{
case 0:
cout << "语文成绩为:\t" << score[i][j] << "\t";
break;
case 1:
cout << "数学成绩为:\t" << score[i][j] << "\t";
break;
case 2:
cout << "英语成绩为:\t" << score[i][j] << "\t";
break;
}
}
switch (i)
{
case 0:
cout << "总成绩为:\t" << addscores[i];
break;
case 1:
cout << "总成绩为:\t" << addscores[i];
break;
case 2:
cout << "总成绩为:\t" << addscores[i];
break;
}
cout << endl;
}
system("pause");
return 0;
}