假设我有struct
struct point_2d {
int x,
int y
};
假设在我的程序中我保留了这种类型的数组,
main()
{
struct point_2d *coords = malloc(10*sizeof(struct point_2d));
...
}
我希望对它们中的每一个进行操作(例如,将所有点'坐标设置为原点或其他东西)。
有没有办法循环而不必知道数组的长度(例如使用字符串,将指针递增直到遇到\0
),还是需要进一步输入来确定长度?< / p>
答案 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()
循环相比,这几乎没有什么可写的,而且您确切地看到了正在发生的事情。