我如何在C中定义一个数据结构,我想存储的每个位置的数据结构是:一个M大小的int数组,一个N大小的int数组和一个double值?我试了一下,但还没有成功。
在代码的开头,我定义了数据结构(LOCOPT),如下所示:

typedef struct LOCOPT
{
  int    *org;
  int    *des;
  double value;
} LOCOPT;

LOCOPT *locopt;

然后,我使用calloc初始化locopt,如下所示:
for( locopt_ctr=0 ; locopt_ctr<locopt_max ; locopt_ctr++ )
{
    locopt[locopt_ctr].org = (LOCOPT *) calloc(M, sizeof(LOCOPT));
    locopt[locopt_ctr].des = (LOCOPT *) calloc(N, sizeof(LOCOPT));
}

当我试图在代码中使用它时,它不起作用:我想这样做:
for( m=0 ; m<M ; m++ )
locopt[locopt_ctr].org[m] = origin[m]; // regardless of what origin[m] is.

我需要多次使用calloc而不是只使用一次,我不知道该怎么做。我需要正确使用循环。有什么想法吗?

最佳答案

你一下子做得太多了。我们先把这个分解成几个简单的部分:
您已声明LOCOPT *locopt。在使用locopt本身作为指向任何对象的指针(或数组语法)之前,必须为其分配内存,例如
locopt[locopt_ctr] = (LOCOPT *) calloc(1,sizeof(LOCOPT));
但这只是努力的一部分。
如果要在locopt的每个实例中存储项列表,则需要对新分配的locopt实例的成员再次调用calloc:
locopt[locopt_ctr].org = (int *) calloc(M, sizeof(int));
locopt[locopt_ctr].des = (int *) calloc(N, sizeof(int));
底线-如果你有一个指针,你必须最终分配它。

关于c - 带指针的C中的数据结构:我想在每个位置存储一个信息数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21588644/

10-08 22:27