c初始化结构的数组

c初始化结构的数组,c,struct,C,Struct,我有两个结构,路径和路径。然后,定义一个路径数组以保存我的数据: enum MAX_NEIGHBOR {MAX_NEIGHBOR = 256}; enum MAX_NUM_PATHS {MAX_NUM_PATHS = 100}; typedef struct { int id; int path[MAX_NEIGHBOR]; } path; typedef struct { int id; path pathsIKnow[MAX_NUM_PATHS]; } p

我有两个结构,路径和路径。然后,定义一个路径数组以保存我的数据:

enum MAX_NEIGHBOR {MAX_NEIGHBOR = 256};
enum MAX_NUM_PATHS {MAX_NUM_PATHS = 100};

typedef struct {
    int id;
    int path[MAX_NEIGHBOR];
} path;

typedef struct {
    int id;
    path pathsIKnow[MAX_NUM_PATHS];
} paths;

paths pathsIKnow[MAX_NEIGHBOR];
我目前正在运行时在一个大循环中初始化数组,这花费了太多的时间。有没有一种方法可以不用循环就初始化它,比如在定义paths数组时

当前循环代码:

void initKnownPaths() {
    for(int j=0;j<MAX_NEIGHBOR;j++){
        paths pathsToI = pathsIKnow[j];
        pathsToI.id = 999;

        for(int i=0 ;i < MAX_NUM_PATHS;i ++){
            path pathToupdate = pathsToI.pathsIKnow[i];
            pathToupdate.id = 999;
            for(int j=0 ;j < MAX_NEIGHBOR;j++){
                int cPathValue = pathToupdate.path[j];

                cPathValue = 999;
                pathToupdate.path[j] = cPathValue;
            }

            pathsToI.pathsIKnow[i] = pathToupdate;
            pathsIKnow[j] = pathsToI;

        }
    }
}

谢谢

如果使用GCC进行编译,则可以使用以下方法代替initKnownPaths函数替换struct path类型的结构变量pathsIKnow:

如果您没有使用GCC,那么您应该根据建议改进现有功能

注意:如果使用第一种方法,编译的二进制文件大小将增加,但这将减少运行时间。时空权衡

参考资料:


您的init函数正在复制周围的大量数据,并且正在做大量被丢弃的工作。你应该先把它清理干净。另外,有两个不同的变量命名为j只是自找麻烦。
paths pathsIKnow[MAX_NEIGHBOR] =
{
  [0 ... MAX_NEIGHBOR - 1] =
  {
    999,
    {
      [0 ... MAX_NUM_PATHS - 1] =
      {
    999,
    {
[0 ... MAX_NEIGHBOR - 1] = 999}}}}};