在动态数组中对每个操作进行操作

时间:2014-10-02 15:15:57

标签: 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),还是需要进一步输入来确定长度?< / p>

1 个答案:

答案 0 :(得分:1)

  

有没有办法循环而不必知道数组的长度(例如使用字符串,将指针递增直到遇到\ 0),还是需要进一步输入来确定长度?

在不知道循环多远的情况下无法循环,除非您向数组添加一个标记值,就像使用C字符串和\0终止一样。即使C ++中的foreach()循环也必须在容器末尾之前获取迭代器才能知道循环的距离。

假设您使用

分配了内存
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;
    
  • 向后:

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

与其他语言中的foreach()循环相比,这几乎没有什么可写的,而且您确切地看到了正在发生的事情。