C 对动态数组中的每个

C 对动态数组中的每个,c,arrays,loops,memory,foreach,C,Arrays,Loops,Memory,Foreach,假设我有一个struct struct point_2d { int x, int y }; 假设在我的程序中,我保留了一个这种类型的数组 main() { struct point_2d *coords = malloc(10*sizeof(struct point_2d)); ... } 我想对每个点做一个操作(例如,将所有点的坐标设置为原点或其他) 是否有一种方法可以在不知道数组长度的情况下循环(例如使用字符串,递增指针直到遇到\0),或者我是否需要进

假设我有一个
struct

struct point_2d {
    int x,
    int y
};
假设在我的程序中,我保留了一个这种类型的数组

main()
{
    struct point_2d *coords = malloc(10*sizeof(struct point_2d));

    ...
}
我想对每个点做一个操作(例如,将所有点的坐标设置为原点或其他)

是否有一种方法可以在不知道数组长度的情况下循环(例如使用字符串,递增指针直到遇到
\0
),或者我是否需要进一步的输入来确定该长度

是否有一种方法可以在不知道数组长度的情况下进行循环(例如使用字符串,递增指针直到遇到\0),还是需要进一步的输入来确定该长度

如果不知道循环的距离,就无法进行循环,除非向数组中添加sentinel值,就像使用C字符串和
\0
终止一样。在C++中,即使<代码>前段()/Cudio>循环,也必须使迭代器越过容器的末端,知道循环有多远。

假设您为内存分配了

int size = 10;
struct point_2d* coords = malloc(size*sizeof(*coords));
我建议使用以下循环构造之一迭代数组:

  • 转发:

    for(int i = 0; i < size; i++) coords[i].x = coords[i].y = 0;
    
在其他语言中,使用
foreach()
循环编写这些代码几乎不算多,您可以准确地看到发生了什么

for(int i = size; i--; ) coords[i].x = coords[i].y = 0;