二维数组就是在一维数组上,多加一个维度。
二维数组定义的四种方式:
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
示例:
#include <iostream> using namespace std; int main() { // 二维数组定义方式 // 1. 数据类型 数组名[行数][列数]; // 2. 数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } }; // 3. 数据类型 数组名[行数][列数] = { 数据1,数据2,数据3,数据4 }; // 4. 数据类型 数组名[][列数] = { 数据1,数据2,数据3,数据4 }; // 1. 数据类型 数组名[行数][列数]; int arr[2][3]; arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[1][0] = 4; arr[1][1] = 5; arr[1][2] = 6; // 外层循环打印行数,内层循环打印列数 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << arr[i][j] << endl; } } // 2. 数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } }; int arr2[2][3] = { { 1,2,3 }, { 4,5,6 } }; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << arr2[i][j] << ""; } cout << endl; } // 3. 数据类型 数组名[行数][列数] = { 数据1,数据2,数据3,数据4 }; int arr3[2][3] = { 1,2,3,4,5,6 }; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << arr3[i][j] << ""; } cout << endl; } // 4. 数据类型 数组名[][列数] = { 数据1,数据2,数据3,数据4 }; int arr4[][3] = { 1,2,3,4,5,6 }; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << arr4[i][j] << ""; } cout << endl; } system("pause"); return 0; }
总结:在定义二维数组时,如果初始化了数据,可以省略行数
示例:
#include <iostream> using namespace std; 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 << "二维数组第二行首地址为:" << (int)arr[1] << endl; cout << "二维数组第一个元素首地址为:" << (int)&arr[0][0] << endl; cout << "二维数组第二个元素首地址为:" << (int)&arr[0][1] << endl; system("pause"); return 0; }
总结1:二维数组名就是这个数组的首地址
总结2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小
考试成绩统计:
案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩
姓名 | 语文 | 数学 | 英语 |
---|---|---|---|
张三 | 100 | 100 | 100 |
李四 | 90 | 50 | 100 |
王五 | 60 | 70 | 80 |
参考答案:
#include <iostream> using namespace std; int main() { // 二维数组案例-考试成绩统计 // 1、创建二维数组 int scores[3][3] = { { 100,100,100 }, { 90,50,100 }, { 60,70,80 } }; string names[] = { "张三", "李四", "王五" }; // 2、统计每个人的综合分数 for (int i = 0; i < sizeof(scores) / sizeof(scores[0]); i++) { int sum = 0; // 统计分数总和变量 for (int j = 0; j < sizeof(scores[0]) / sizeof(scores[0][0]); j++) { sum += scores[i][j]; cout << scores[i][j] << " "; } cout << "第" << names[i] << "个人的总分为:" << sum << endl; } // 成绩数组 //int arr[3][3] = //{ // { 100,100,100 }, // { 90,50,100 }, // { 60,70,80 } //}; //string name[] = { "张三", "李四", "王五" }; //for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) //{ // int temp = 0; // for (int j = 0; j < sizeof(arr[0]) / sizeof(arr[0][0]); j++) // { // temp += arr[i][j]; // } // cout << name[i] << "的成绩为:" << temp << endl; //} system("pause"); return 0; }