积极答复者
字符数组数组的非顺序访问

问题
-
//数据结构:
typedef struct square{
int border;
char * graph;
square(int b){
border = b;
graph = (char*)malloc(b * b);
}
} Square;//定义:
Square change = square(6);
//初始化
...
//处理
border = change.border;
printf("顺序输出的结果:\n");
for(int i=0; i<border; i++){
for(int j=0; j<border; j++){
printf("(%d, %d) = %c ", i, j, change.graph[change.border*i+j]);
}
printf("\n");
}
printf("跳着输出的结果:\n");
for(int i=0; i<border; i++){
for(int j=0; j<border; j++){
printf("(%d, %d) = %c ", border-1-j, i, change.graph[change.border*(border-1-j)+i]);
}
printf("\n");
}输出的结果:
第一个square:
顺序输出的结果:
(0, 0) = o (0, 1) = o (0, 2) = o (0, 3) = b
(1, 0) = o (1, 1) = o (1, 2) = o (1, 3) = o
(2, 0) = b (2, 1) = b (2, 2) = o (2, 3) = o
(3, 0) = o (3, 1) = o (3, 2) = b (3, 3) = o
跳着输出的结果:
(3, 0) = o (2, 0) = b (1, 0) = o (0, 0) = o
(3, 1) = ? (2, 1) = o (1, 1) = b (0, 1) = o
(3, 2) = ? (2, 2) = ? (1, 2) = o (0, 2) = b
(3, 3) = ? (2, 3) = ? (1, 3) = ? (0, 3) = o
第二个square:
顺序输出的结果:
(0, 0) = o (0, 1) = b (0, 2) = o (0, 3) = o (0, 4) = o
(1, 0) = o (1, 1) = o (1, 2) = b (1, 3) = o (1, 4) = o
(2, 0) = o (2, 1) = o (2, 2) = b (2, 3) = o (2, 4) = o
(3, 0) = o (3, 1) = o (3, 2) = o (3, 3) = o (3, 4) = b
(4, 0) = b (4, 1) = o (4, 2) = o (4, 3) = o (4, 4) = o
跳着输出的结果:
(4, 0) = o (3, 0) = o (2, 0) = o (1, 0) = o (0, 0) = b
(4, 1) = ? (3, 1) = o (2, 1) = o (1, 1) = o (0, 1) = o
(4, 2) = ? (3, 2) = ? (2, 2) = o (1, 2) = o (0, 2) = o
(4, 3) = ? (3, 3) = ? (2, 3) = ? (1, 3) = o (0, 3) = o
(4, 4) = ? (3, 4) = ? (2, 4) = ? (1, 4) = ? (0, 4) = o
第三个square:
顺序输出的结果:
(0, 0) = o (0, 1) = o (0, 2) = b (0, 3) = o
(1, 0) = b (1, 1) = o (1, 2) = o (1, 3) = o
(2, 0) = o (2, 1) = o (2, 2) = b (2, 3) = b
(3, 0) = o (3, 1) = o (3, 2) = o (3, 3) = o
跳着输出的结果:
(3, 0) = o (2, 0) = o (1, 0) = o (0, 0) = o
(3, 1) = ? (2, 1) = o (1, 1) = o (0, 1) = o
(3, 2) = ? (2, 2) = ? (1, 2) = o (0, 2) = o
(3, 3) = ? (2, 3) = ? (1, 3) = ? (0, 3) = o疑问:顺序输出的结果是正确的,为什么跳着输出就错了呢?