如何在C中数组的任意点初始化多个结构?

cu6pst1q  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(102)

我有一个用C语言定义的结构

struct problem_spec_point {
        int point_no;
        double x;
        double y;
        int bc;
};

我有一个长度为6的这些结构的数组,前四个结构在初始化时显式定义。

static struct point points[6] =
    {
        {0, 1, 2, 5},
        {0, 1, 2, 6},
        {0, 1, 2, 7},
        {0, 1, 2, 8},
    };

我可以稍后添加第五和第六个结构:points[4] = (struct point) {0,1,2,12}; points[5] = (struct point) {3,3,3,3};但是假设我想一次添加这两个(或多个)连续的结构。
points[4] = {(struct point) {0,1,2,12}, (struct point) {3,3,3,3},};有没有这样的方法呢?
显然,我尝试了上面列出的语法。
实际上,我的代码有一个长度为3n+6的数组。我有一个for循环,为前3n个结构赋值,但最后6个结构有一个不同的奇怪模式。

for(int i = 0; i < 3n; i++)
{
 point[i] = stuff;
}

//odd points here at end of array

我可以切换顺序并做一些索引更改:

static struct point points[3n+6] = 
{
  last points first
}

for(int i = 6; i < 3n+6, i++
{
  point[i]=stuff;
}

但是我不想。我对C不是很熟悉,而且我很好奇。
这是我的第一篇文章,所以请原谅我没有遵循正常的格式。

w7t8yxp5

w7t8yxp51#

最好的方法可能只是用简单可读的代码输入它:

points[4] = (struct point) {0,1,2,12};
points[5] = (struct point) {3,3,3,3};

或者,对于具有相同值的大间隔等,使用memcpy。也许沿着这样的:

#include <string.h>

void add_points (struct point* points, const struct point* val, size_t from, size_t to)
{
  for(size_t i=from; i<=to; i++)
  {
    memcpy(&points[i], val, sizeof(struct points));
  }
}

// usage example: assign {3,3,3,3} from index 4 to index 5

add_points(points, &(struct point){3,3,3,3}, 4, 5);

(This代码可以通过使用restrict指针稍微优化。

ru9i0ody

ru9i0ody2#

Lundin正确地告诉我们可以使用memcpy,但他没有明确地提到可以重新定义不同的值

points[4] = {(struct point) {0,1,2,12}, (struct point) {3,3,3,3},};

关于memcpy

memcpy(points+4, (struct point []){ {0,1,2,12}, {3,3,3,3} },
              sizeof (struct point [2]));

相关问题