二维数组的初始化
1) 常规初始化:
int arr[3][5] = {{2, 3, 54, 56, 7 }, {2, 67, 4, 35, 9}, {1, 4, 16, 3, 78}};
2) 不完全初始化:
int arr[3][5] = {{2, 3}, {2, 67, 4, }, {1, 4, 16, 78}}; 未被初始化的数值为 0
int arr[3][5] = {0}; 初始化一个 初值全为0的二维数组
int arr[3][5] = {2, 3, 2, 67, 4, 1, 4, 16, 78}; 系统自动分配行列。
3)不完全指定行列初始化:
int arr[][] = {1, 3, 4, 6, 7}; (错误的)二维数组定义必须指定列值。
int arr[][2] = { 1, 3, 4, 6, 7 }; (行和列必须指定一个)可以不指定行值。
// 二维数组的初始化
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main()
{
int arr[][2] = { 1, 3, 4, 6, 7 };
int row = sizeof(arr) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
for (int i = 0; i < row; i++) //行
{
for (int j = 0; j < col; j++) //列
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("数组的大小为:%u\n", sizeof(arr));
printf("数组行的大小:%u\n", sizeof(arr[0]));
printf("数组一个元素的大小:%u\n", sizeof(arr[0][0]));
printf("行数=总大小/一行大小:%d\n", sizeof(arr) / sizeof(arr[0]));
printf("列数=行大小/一个元素大小:%d\n", sizeof(arr[0]) / sizeof(arr[0][0]));
printf("arr= %p\n", arr);
printf("&arr[0] = %p\n", &arr[0][0]);
printf("arr[0] = %p\n", arr[0]);
}
案例:求出五名学生三门功课的总成绩
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main()
{
int scores[5][3] = { 0 };
int row = sizeof(scores) / sizeof(scores[0]);
int col = sizeof(scores[0]) / sizeof(scores[0][0]);
// 获取 5 名学生、3门功课成绩
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
scanf("%d", &scores[i][j]);
}
}
// 求一个学生的总成绩
for (int i = 0; i < row; i++) // 每个学生
{
int sum = 0;
for (int j = 0; j < col; j++)// 每个学生的成绩
{
sum += scores[i][j];
}
printf("第%d个学生的总成绩为:%d\n", i + 1, sum);
}
}