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;