Структурировать с помощью указателей в C ++ - PullRequest
0 голосов
/ 22 ноября 2018

Я не разбираюсь в своих структурах данных, и у меня возникла проблема с использованием структур.

Я хочу создать структуру, которая будет указателем на значения из массива, взятого из входного файла..

Скажем, например, я создал здесь структуру:

struct complexnums {
    float * real;  //A ptr to real list
    float * imag;  //A ptr to imag list
};

int main()
{
    //Lets say this is an array I have taken from file input
    float real [] = {1.0, 2.0, 3.0, 4.0};
    float imag [] = {0.5, 1.0, 1.5, 2.0};

    //How can I assign the structure ptr's to these arrays?
    //Do I do it like this?
    complexnums complex = {&real[0],&imag[0]};
}

Учитывая приведенный выше пример, является ли правильный способ присвоения ему значений?Получит ли структура на самом деле указатели на эти значения выше?

Также я рассмотрел пример того, как выглядит структура, и этот человек сделал это.

typedef struct {
    int sample;
    int *test1;
}
struct1, *struct2;

В чем разницамежду struct1 и struct2?

Извините, и дайте мне знать, если это понятно.Если нет, я постараюсь отредактировать его как можно лучше.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Чтобы ответить на первый вопрос, да, вы можете назначить указатели таким образом, и это правильно.Но любой, кто просматривает код, может быть сбит с толку.Таким образом, переименование членов и переменных может быть намного понятнее.

При назначении комплекса, сначала определив его, а затем назначив отдельные элементы, становится ясно, что не смешиваться, так как с прямой инициализацией назначать вещественные значения очень просто.мнимым и наоборот.

struct complexnums {
    float * reals;  // A ptr to array of reals
    float * imags;  // A ptr to array of imaginarys
};

int main()
{
    float realArray [] = {1.0, 2.0, 3.0, 4.0};
    float imagArray [] = {0.5, 1.0, 1.5, 2.0};

    complexnums complex;
    complex.reals = realArray;
    complex.imags = imagArray;
}
0 голосов
/ 22 ноября 2018

Чтобы ответить на вторую часть вашего вопроса, в утверждении:

typedef struct myStruct {
    //...
} structType, *ptrToStructType;

Результирующие определения типов: structType, сокращение от struct myStruct и ptrToStructType сокращение от structType*.Идентификаторы структуры являются необязательными (myStruct в этом примере опущено в вашем).

См .: Путаница с typedef и указателями в C

...