创建一个包含指针的数组

时间:2015-12-15 21:14:15

标签: c arrays pointers malloc

我正在尝试在C中创建一个指针数组。数组的每个值都应该是一个指向struct的指针(让我们称之为struct Type *)。

我应该

struct Type* myVariable= malloc(sizeof(struct Type*)*MY_SIZE);

struct Type** myVariable= malloc(sizeof(struct Type*)*MY_SIZE);

第二个看起来就像我想要创建二维数组时所做的那样,这是一个指针数组,这些指针用于创建所需类型的数组。 编辑:但在我的情况下,第二个维度大小只有一个

第一个看起来像一个常规数组,其中int *作为包含的值类型。

如何将好的解决方案传递给函数(通过指针,而不是值,因为数组可能相当大)并在函数中使用它?

2 个答案:

答案 0 :(得分:2)

第二个是正确的解决方案。但是,您还需要为对象分配内存。另外,请务必检查malloc返回的值。

// Allocate memory for the array of pointers.
struct Type** myVariable = malloc(sizeof(struct Type*)*MY_SIZE);
if ( myVariable == NULL )
{
   // Deal with error
   exit(1);
}

for (int i = 0; i < MY_SIZE; ++i )
{
   // Allocate memory for the array of objects.
   myVariable[i] = malloc(sizeof(struct Type)*THE_SIZE_IN_THE_OTHER_DIMENSION);
   if ( myVariable[i] == NULL )
   {
      // Free everything that was allocated so far
      for (int j = 0; j < i-1; ++j )
      {
         free(myVariable[j]);
      }
      free(myVariable);

      // Exit the program.
      exit(1);
   }
}

但是,如果THE_SIZE_IN_THE_OTHER_DIMENSION将成为1,那么您最好使用第一种方法。

struct Type* myVariable = malloc(sizeof(struct Type)*MY_SIZE);
                                     // ^^^^^^^^^^^ Drop the *
if ( myVariable == NULL )
{
   // Deal with error
   exit(1);
}

答案 1 :(得分:0)

既不!

使用减少工作和错误的习语

pointer = malloc(sizeof *pointer * Number_of_elements);

或者在OP的情况下&#34;在C&#34中创建一个指针数组;

#define ARRAY_N 100
struct Type **myVariable = malloc(sizeof *myVariable * N);
if (myVariable == NULL) Handle_OutOfMemmory();

现在将这些指针设置为某个值

#define M 50
size_t i;
for (i=0; i<N; i++) {
  myVariable[i] = malloc(sizeof *(myVariable[i]) * M);
  if (myVariable[i] == NULL) Handle_OutOfMemmory();

  for (size_t m = 0; m<M; m++) {
    // Initialize the fields of 
    myVariable[i][m].start = 0;
    myVariable[i][m].value = 0.0;
    myVariable[i][m].set = NULL;
  }
}