Массив указателей с использованием структур - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь создать массив указателей одной структуры в другой. Я хочу иметь возможность получить доступ к каждому блоку, который я выделил, используя это: info-> array [0], и он должен указывать куда-то, чтобы я мог освободить все, на что он указывает, но он компилятор говорит, что я должен разыменовать его .. Я Я не уверен, почему, потому что местоположение является указателем, и это то, что я пытаюсь поместить туда. Я не слишком много работал с указателями, поэтому думаю, что с моим пониманием что-то не так. Что мне делать, чтобы мне не приходилось разыменовываться, и я могу хранить / удалять содержимое в массиве.

#include <stdio.h>
#include <stdlib.h>

typedef struct numbers{
    int num1;
    int num2;
}Numbers;

typedef struct info {
    Numbers *array;
    char firstName[50];
    char lastName[50];
} Info;

int main() {
  Info *info = malloc(sizeof(Info));
  info->array = malloc(sizeof(Info*)*10);

  Numbers *num1 = malloc(sizeof(Numbers));
  info->array[0] = num1; //why dereference??
  return 0;
}

1 Ответ

0 голосов
/ 05 июля 2018

В вашем примере info->array будет указателем на объект типа Numbers, тогда как info->array[0] разыменовывается и имеет тип Numbers. Таким образом, компилятор жалуется, что вы назначаете «указатель на числа» на объект «числа». Если вы хотите, чтобы array указывал на адрес объекта Numbers, вам нужно использовать двойной указатель или указатель на указатель, чтобы ваше определение Info было:

typedef struct info {
    Numbers **array;
    char firstName[50];
    char lastName[50];
} Info;

тогда info->array[0] будет содержать указатель на объект типа Numbers, а info->array[0] = num1 из вашего кода будет хранить адрес того, что вы выделили в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...