D语言二维数组索引变量使用时出现越界问题求助
D语言二维数组索引越界问题解决
问题根源
D语言中多维数组的声明顺序和C/C++完全相反:
- C/C++里
float NOTAS[8][4]表示8行4列的二维数组 - 但D语言里
float[8][4] NOTAS的含义是:一个包含4个元素的数组,每个元素是长度为8的float数组(即4行8列)
你的循环逻辑是处理8个学生(对应行)、每个学生4个成绩(对应列),但数组实际只有4行,当循环到第5个学生(I=4)时,就会触发索引越界。
修正后的代码
把数组声明改成float[4][8] NOTAS,外层数组长度为8(对应8个学生),每个元素是长度为4的float数组(对应每个学生的4个成绩):
import std.stdio; void main() { float[4][8] NOTAS; // 修正数组维度顺序:8个学生,每个4个成绩 int I, J; writeln("2D ARRAY - INPUT AND OUTPUT\n"); for (I = 0; I < 8; I++) { writefln("Enter grades for student %d:", I + 1); for (J = 0; J < 4; J++) { writef("Grade ==> %d: ", J + 1); readf(" %f", &NOTAS[I][J]); } writeln(); } writeln("\nGRADE REPORT\n"); writeln("Student Grade1 Grade2 Grade3 Grade4"); writeln("------- ------ ------ ------ ------"); for (I = 0; I < 8; I++) { writef("%7d", I + 1); for (J = 0; J < 4; J++) { writef("%7.1f", NOTAS[I][J]); } writeln(); } }
为什么之前的修改无效?
- 把
I < 8改成I <=7:循环次数未变,还是8次,数组依然只有4行,仍会越界 - 改成
float[9][5]:依然搞反了维度顺序,变成5行9列,循环到第6个学生时仍会触发越界
额外说明
D语言的多维数组是数组的数组,声明时从内到外是元素数组的长度,外层是包含的数组数量。比如T[N][M]表示M个元素,每个元素是N个T类型的数组,对应逻辑上的M行N列。
内容的提问来源于stack exchange,提问作者SwFly
相关产品推荐
相关产品推荐

