首页 > 解决方案 > 在for循环中将值存储在数组中

问题描述

编辑:对于这个任务,我需要输入我们在笛卡尔网格上放置了多少个矩形“区域”。我们的 4 个输入是每个区域的 2 (x,y) 坐标x1, y1, x2, y2, 。坐标应该是矩形的左下角和右上角。我们正在检查每个区域是否与之前的任何区域重叠,因此我需要保存之前区域的坐标,以便以后可以使用它们来检查重叠。我的教授要求我们为这个程序使用动态内存分配。

我正在尝试创建一个 x 和 y 坐标数组以相互比较。循环的每次迭代for都将要求 2 个坐标点 ( x1, y1, x2, y2) 与下一组点进行比较,因此每次for循环结束时,需要保存输入的坐标。我已经使用malloc()了每个值,我只需要帮助弄清楚如何在下一个for循环以有效方式开始时将它们从被擦除的情况下保存。我应该为每个值创建一个数组还是效率低下?

int i, j;
int zones, *x1, *y1, *x2, *y2;

scanf("%d", &zones);

x1 = malloc(sizeof(int)*zones);
y1 = malloc(sizeof(int)*zones);
x2 = malloc(sizeof(int)*zones);
y2 = malloc(sizeof(int)*zones);

for(i=0; i<zones; i++)
{
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
}

扫描我的价值观后,我不确定从那里去哪里。另外我不确定我malloc是否正确输入。我希望每个值都足够大以容纳等于将被询问的区域数量的值。

标签: carraysfor-loopmallocstorage

解决方案


您已经创建了一组缓冲区来存储大小区域的整数。您有 4 个变量指向每个缓冲区中的第一个字节(x1、y1、x2、y2)。

您的扫描语句中有一个小错误,扫描需要指向您要存储值的内存的指针。但是 x1 等已经是指针,所以你不需要 &x1,只要 x1 会做你需要的。

接下来,您要推进指针以扫描到您为数组创建的缓冲区中的下一个内存位置。您可以在每次扫描后增加指针;例如 x1++ 。这会将每个值放在缓冲区中的后续位置。

但这也会失去对缓冲区本身的引用。您可以在循环之后将指针移回缓冲区的开头(例如 - x1 = x1 - 区域),或者您可以创建一个不同的指针来迭代可能更具可读性的缓冲区。


推荐阅读