【发布时间】:2020-10-12 09:19:16
【问题描述】:
我有一个包含字符的二维数组,但是当我更改其中一个值时,它会在数组中的两个不同位置发生变化。
我当前的代码是:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define WIDTH 100
#define HEIGHT 50
#define SHADE " .*#@"
void print_display(char disp[WIDTH][HEIGHT])
{
system("cls");
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++)
printf("%c", SHADE[disp[y][x]]);
printf("\n");
}
}
int main()
{
char disp[WIDTH][HEIGHT];
memset(&disp, 1, WIDTH * HEIGHT);
disp[49][0] = 4;
print_display(disp);
return 0;
}
运行此代码会为我生成:
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
..................................................@.................................................
@...................................................................................................
我尝试将数组存储在堆上,但仍然存在同样的问题。 谢谢。
【问题讨论】:
-
仅供参考,您的循环运行 HEIGHT->WIDTH,而您的数组尺寸为 WIDTH->HEIGHT。是的。从那开始。
-
printf("%c", SHADE[disp[y][x]]);应该是printf("%c", SHADE[disp[x][y]]); -
值得一提,如果您正在对数组进行表格化(而且看起来确实如此),那么“宽度”应该是 inferior 下标,而“高度”应该是上级下标。换句话说,50 行 20 个元素的数组将是:
char[50][20]。更改程序中所有不 与该口头禅一致的内容(应该有两个关键的地方你会看到是错误的),并且它应该像你想要的那样运行。
标签: arrays c multidimensional-array