C 断续的麻烦

C 断续的麻烦,c,arrays,C,Arrays,我已经在C语言中做了几天的分离作业了。我理解find函数(w/和w/o路径压缩),在对集合执行并集时使用函数链接中的秩。但是我在C语法方面有问题 我们必须创建一个包含该集合的秩和键的记录数组。因此,我的结构如下所示: typedef struct DisjointSet_t { int data; int key; } DisjointSet; 我的问题是声明数组来操作集合。初始化集合的数组时出现问题。以下是CreateSet代码的片段: static DisjointSet *S;

我已经在C语言中做了几天的分离作业了。我理解find函数(w/和w/o路径压缩),在对集合执行并集时使用函数链接中的秩。但是我在C语法方面有问题

我们必须创建一个包含该集合的秩和键的记录数组。因此,我的结构如下所示:

typedef struct DisjointSet_t {
  int data;
  int key;
} DisjointSet;
我的问题是声明数组来操作集合。初始化集合的数组时出现问题。以下是CreateSet代码的片段:

static DisjointSet *S;

void CreateSet(int numElements){  
  DisjointSet *t;

  if (numElements > 0){
    t = (DisjointSet *)malloc(sizeof(DisjointSet));
    }

  if(S != NULL){
    S = t[numElements+1];
  }  
}

如果我用Java实现这个,我想会简单一点。我该如何改进这一点?关于如何在C中初始化类数组,我是否缺少了一些理解?

变量S和t都是DisjointSet*类型,因此您应该能够将t赋值给S

if (S != NULL)
{
    S = t;
}
此外,还需要将静态S初始化为NULL

static DisjointSet *S = NULL;

变量S和t都是DisjointSet*类型,所以您应该能够将t赋给S

if (S != NULL)
{
    S = t;
}
此外,还需要将静态S初始化为NULL

static DisjointSet *S = NULL;

如果试图分配数组,则需要为所有数组元素分配空间:
malloc(sizeof(DisjointSet)*numElements)


此外,您还可以按照Jeremy Simon的描述分配S。

如果您试图分配数组,则需要为所有数组元素分配空间:
malloc(sizeof(DisjointSet)*numElements)

此外,您还可以按照Jeremy Simon的描述分配S。

嗯。。。与

malloc(sizeof(DisjointSet))
为DisjointSet类型的一个对象保留空间。要为20个对象分配空间,您需要乘以

malloc(20 * sizeof(DisjointSet))
一旦你有20个对象,在一个数组中,数组从0变为19。

Hmmm。。。与

malloc(sizeof(DisjointSet))
为DisjointSet类型的一个对象保留空间。要为20个对象分配空间,您需要乘以

malloc(20 * sizeof(DisjointSet))

并且,一旦在一个数组中有20个对象,数组将从0变为19。

全局数据将初始化为0。并不是说显式地这样做是个坏主意。全局数据被初始化为0。并不是说明确这样做是个坏主意。