在 C 结构中存储关系

  • 本文关键字:存储 关系 结构 c
  • 更新时间 :
  • 英文 :


我想在 C 中存储东西(比如人)的关系。我想出了

#include <stdio.h>
int main(void)
{
typedef struct rel
{
int person;         // person #
int num;            // number of relationships recorded
int relationship[]; // the person # of the person's relationships
} rel;
rel rels[10];
int person = 0;
int num;
int i;
// Adding persons
for (i = 0; i < 10; i++)
{
rels[i].person = i;
}
// Adding random relationships for person #0
for (i = 1; i < 10; i+=2)
{
num = rels[0].num;
rels[0].relationship[num] = i;
rels[0].num += 1;
}
// Reading all relationships of person #0
for (i = 0; i < rels[0].num; i ++)
{
printf("Person1 (%d) -> Person2: (%d)n", person, rels[0].relationship[i]);
}
return 0;
}

但我不确定这是否是正确的方法。主要目的是捕获一个人的所有关系。

这种方法是错误的,因为没有空间来存储分配的关系。您应该分配数组来动态存储它们。

此外,您需要在使用其值之前初始化rels[0].num,并在i中添加一个而不是两个以打印所有关系。

#include <stdio.h>
#include <stdlib.h> /* for realloc() */
int main(void)
{
typedef struct rel
{
int person;         // person #
int num;            // number of relationships recorded
/* use a pointer for dynamic array */
int *relationship; // the person # of the person's relationships
} rel;
rel rels[10];
int person = 0;
int num;
int i;
// Adding persons
for (i = 0; i < 10; i++)
{
rels[i].person = i;
/* initialize members */
rels[i].num = 0;
rels[i].relationship = NULL;
}
// Adding random relationships for person #0
for (i = 0; i < 10; i++)
{
/* dynamically re-allocate the array */
int* newRelationship;
num = rels[0].num;
newRelationship = realloc(rels[0].relationship, sizeof(*rels[0].relationship) * (num + 1));
if (newRelationship == NULL)
{
perror("realloc");
return 1;
}
rels[0].relationship = newRelationship;
rels[0].relationship[num] = i;
rels[0].num += 1;
}
// Reading all relationships of person #0
for (i = 0; i < rels[0].num; i += 1) /* add one, not two, to print all relationships */
{
printf("Person1 (%d) -> Person2: (%d)n", person, rels[0].relationship[i]);
}
return 0;
}

最新更新