c - 在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
是否正确输入。我希望每个值都足够大以容纳等于将被询问的区域数量的值。
解决方案
您已经创建了一组缓冲区来存储大小区域的整数。您有 4 个变量指向每个缓冲区中的第一个字节(x1、y1、x2、y2)。
您的扫描语句中有一个小错误,扫描需要指向您要存储值的内存的指针。但是 x1 等已经是指针,所以你不需要 &x1,只要 x1 会做你需要的。
接下来,您要推进指针以扫描到您为数组创建的缓冲区中的下一个内存位置。您可以在每次扫描后增加指针;例如 x1++ 。这会将每个值放在缓冲区中的后续位置。
但这也会失去对缓冲区本身的引用。您可以在循环之后将指针移回缓冲区的开头(例如 - x1 = x1 - 区域),或者您可以创建一个不同的指针来迭代可能更具可读性的缓冲区。
推荐阅读
- r - 如何在R中以每年正确的月份顺序重新排列绘图条形图xaxis?
- r - 尝试在 R 中重新排列表格。(我是初学者!)是否有某种“转置”功能?
- java - 在构建阶段将 GraphQL bigint 转换为 Android (Java) 整数
- sql - 查询表中每个可能的日期组合并对值求和
- iframe - Power BI iframe:IE 和 Edge 的问题
- azure-active-directory - 了解 azure 中的单租户术语
- r - 绘制条形图
- c# - 我的网络浏览器不会存储响应标头中的 cookie
- sql - 编写递归查询时遇到问题
- unity3d - 如何使用 Azure 空间锚通过 Hololens 1 主持和观看?