【发布时间】:2022-01-16 11:52:55
【问题描述】:
既然 C 从零开始计数,为什么在这种需要 2 行和 5 列的二维数组的情况下,它不是grades[1][4],而是写为grades[2][5]?
查看示例:
#include <stdio.h>
int main() {
int grades[2][5]; <-------???? why not [1][4]???
float average;
int i;
int j;
grades[0][0] = 80;
grades[0][1] = 70;
grades[0][2] = 65;
grades[0][3] = 89;
grades[0][4] = 90;
grades[1][0] = 85;
grades[1][1] = 80;
grades[1][2] = 80;
grades[1][3] = 82;
grades[1][4] = 87; <--- why not until [2][5] too????
for (i = 0; i < 2; i++) {
average = 0;
for (j = 0; j < 5; j++) {
average += grades[i][j];
}
average /= 5.0;
printf("The average marks obtained in subject %d is: %.2f\n", i, average);
}
return 0;
}
【问题讨论】:
-
声明表示维度的大小;索引表示相对于维度基础的位置。它们不是一回事。
-
@WhozCraig:这说明了规则是什么,但并没有真正回答原因。指定在 C 语言中,声明将指定最后一个元素索引而不是元素的数量,没有数学或技术障碍。此外,由于 K&R 将声明作为事物使用时的“图片”(例如,
int *p表示*p将用作int),那么int a[2]将通过说 @ 更适合此模型987654328@将用作int,因此数组中必须有一个索引为2的元素,而不是说a[something]将用作int,但2是一个大小。
标签: arrays c multidimensional-array indexing declaration