Как обратиться к указателю в структуре?

263
24 апреля 2017, 05:02

Имется структура:

struct _nvr
{
  char ip_nvr[50];
  char log[50];
  char passwd[50];
  char ip_cam[20][50];
  char id_cam[16][10];
  LONG lUserID;
  NET_DVR_DEVICEINFO_V30 struDeviceInfo; //the info get when login
  NET_DVR_WORKSTATE_V40 *pStruWorkStateV40;
  NET_DVR_GETWORKSTATE_COND struWorkStateCond;
  DWORD dwList;
  int flag;
};
_nvr nvr[30] = {};
  1. Как можно обратится к данной переменной *pStruWorkStateV40?
  2. Можно ли ее проинициализировать в структуре:

    NET_DVR_WORKSTATE_V40 *pStruWorkStateV40 = new NET_DVR_WORKSTATE_V40;
Answer 1

Если к самому значению - то

*nvr[i].pStruWorkStateV40

Если к какому-то полю NET_DVR_WORKSTATE_V40 - то

nvr[i].pStruWorkStateV40->field_name
Answer 2

К указателям в структурах обращаются так же как и к любым другим членам данных:

имя_экземпляра.имя_поля_данных 

Это базовая информация, которая даётся в самом начале любого учебника/курса по языку. Без таких знаний просто невозможно создать что-то минимально осмысленное.

Можно ли ее проинициализировать в структуре?

Инициализация нестатического члена в момент определения структуры возможна в c++, начиная с c++11:

struct S {
   T* var = new T();
};

В c и более ранних c++ стандартах такая инициализация невозможна. Требуется создавать конструктор (с++) или делать это в некоторой функции инициализации (с).

Answer 3

У вас объявлен массив структур

_nvr nvr[30] = {};

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

nvr[i]

где i - это некоторое значение индекса в диапазоне [0, 30), и применить оператор обращения к члену данных класса .. Например,

nvr[i].pStruWorkStateV40

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

nvr[i].pStruWorkStateV40 = new NET_DVR_WORKSTATE_V40;

В этом случае член данных, представляющий из себя указатель и заданный выражением nvr[i].pStruWorkStateV40, будет указывать на выделенный памяти объект.

Чтобы присвоить некоторое значение этому объекту, вы должны разыменовать этот указатель, используя оператор разыменования * . Например,

*nvr[i].pStruWorkStateV40 = SomeValue;
READ ALSO
Где здесь ошибка?

Где здесь ошибка?

Пожалуйста помогите найти мою ошибку

317
C++ iterator для своего контейнера

C++ iterator для своего контейнера

Здравствуйте! Я написал свой класс-контейнерИ теперь мне нужно написать класс iterator, чтобы мой контейнер смог взаимодействовать с алгоритмами...

290
Структуры с++ Visual Studio

Структуры с++ Visual Studio

Создал стуктуруВвожу 2 элемента f

215