Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
#1

typedef struct .... - C++

04.05.2011, 17:01. Просмотров 2100. Ответов 14
Метки нет (Все метки)

Здравствуейте. Обьясните пожалуйсто новичку что означает этот код.
C++
1
2
3
4
5
6
typedef struct
{
    long num_servers;
    long data_size;
    char* data;
}SSQ_BATCH_REPLY,*PSSQ_BATCH_REPLY;
и как мне получить доступ к членам этой структуры через указатель и просто как к переменным?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 17:01     typedef struct ....
Посмотрите здесь:

C++ typedef struct
typedef struct C++
C++ Программа через структуру typedef struct
typedef C++
Волшебные вещи с typedef struct C++
typedef C++
typedef в c++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SergeyS
153 / 145 / 6
Регистрация: 12.03.2011
Сообщений: 807
04.05.2011, 17:26     typedef struct .... #2

Не по теме:

Появился у меня единомышленник на форуме, который хочет того же, что и я



Эта конструкция задает тип SSQ_BATCH_REPLY и *PSSQ_BATCH_REPLY

Обьявлять экземпляр так:
C++
1
SSQ_BATCH_REPLY batch_reply
А вот насчёт доступа не помню. К первому типу вроде обычно через точку, а ко второму через указатель.
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2011, 17:27     typedef struct .... #3
LedZeppelin, ключевое слово typedef создает синоним для типа. Например, можно написать так:
C
1
2
3
4
typedef char BYTE;
...
// тип BYTE - синоним типа char
BYTE byte = 0;
В данном случае создается синоним для безымянной структуры. При использовании typedef будет происходить тоже самое, что и в примере с char/BYTE.
Создать экземпляр структуры и обратиться к элементу структуры:
C
1
2
SSQ_BATCH_REPLY foo;
foo.num_servers = 10;
Создать указатель на структуру и обратиться к элементу:
C
1
2
PSSQ_BATCH_REPLY foo_ptr = &foo;
foo_ptr->num_servers = 15;
Как видите с помощью typedef здесь создан синоним для указателя, конечно, аналогично можно создать указатель и простым путем:
C
1
SSQ_BATCH_REPLY * foo_ptr2 = NULL;
В языке Си для создания экземпляра структуры всегда необходимо использовать ключевое слово struct, typedef позволяет этого не делать, поэтому зачастую имя для структуры просто не пишется. Правда есть исключения, когда писать имена приходится.
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:29  [ТС]     typedef struct .... #4
Дело в том что есть функция которая принимает в качестве аргумента указатель на эту структуру и заполняет её.
C++
1
2
3
BOOL WINAPI SSQ_FormatBatchReply(
    PSSQ_BATCH_REPLY
);
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2011, 17:31     typedef struct .... #5
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Дело в том что есть функция которая принимает в качестве аргумента указатель на эту структуру и заполняет её.
А вы не можете передать указатель на структуру?
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:33  [ТС]     typedef struct .... #6
Вот вот, мне нужно передать этот самый указатель. Далее функция заполнит структуру, а потом мне надо получить все члены структуры (например вывести их в консоль,, но как ??)
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2011, 17:37     typedef struct .... #7
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Вот вот, мне нужно передать этот самый указатель. Далее функция заполнит структуру, а потом мне надо получить все члены структуры (например вывести их в консоль,, но как ??)
C
1
2
3
4
5
6
SSQ_BATCH_REPLY ssq; // экземпляр структуры
SSQ_FormatBatchReply(&ssq); // указатель в функцию
 
// доступ к переменным
long x = ssq.num_servers;
long y = ssq.data_size;
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:40  [ТС]     typedef struct .... #8
fasked, Компиллятор сообщил ошибку: invalid conversion from 'BOOL' to 'SSQ_BATCH_REPLY*'
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2011, 17:47     typedef struct .... #9
Цитата Сообщение от LedZeppelin Посмотреть сообщение
А вот &ssq обязательно передавать со знаком & ?
Знак амперсанд (&) позволяет взять адрес переменной, что и есть указатель. Этого делать не обязательно, если Вы уже управляете указателем. Если взять адрес указателя, то получится двойной указатель.
В данном случае ssq - это сам объект. Поэтому да, обязательно.
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:55  [ТС]     typedef struct .... #10
fasked, А как теперь получить доступ к членам струкуты. Например я хочу вывести их с помощью cout. Собственно ради получения этих данных вся затея.

Не по теме:

P.S Выше я писал про ошибку, так это не компилятор это я ошибся _))

fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2011, 17:56     typedef struct .... #11
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Компиллятор сообщил ошибку: invalid conversion from 'BOOL' to 'SSQ_BATCH_REPLY*'
Покажите свой код и убедитесь, что Вы правильно указали нам прототип.
Я же объяснил, что функция принимает указатель, знак амперсанда берет адрес от переменной, что и есть указатель.
SergeyS
153 / 145 / 6
Регистрация: 12.03.2011
Сообщений: 807
04.05.2011, 17:57     typedef struct .... #12
Нужно просто передавать так:
C++
1
2
PSSQ_BATCH_REPLY reply;
SSQ_FormatBatchReply(reply);
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2011, 17:58     typedef struct .... #13
bober94, а память кто выделять будет? ничего, что объекта не существует и программа просто рухнет при обращении к случайному адресу?
головой надо думать прежде, чем советовать.
SergeyS
153 / 145 / 6
Регистрация: 12.03.2011
Сообщений: 807
04.05.2011, 18:00     typedef struct .... #14
Цитата Сообщение от fasked Посмотреть сообщение
bober94, а память кто выделять будет? ничего, что объекта не существует и программа просто рухнет при обращении к случайному адресу?
головой надо думать прежде, чем советовать.
Точно, забыл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 00:59     typedef struct ....
Еще ссылки по теме:

typedef struct + TXT C++
C++ Для чего typedef struct
Typedef C++
typedef C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
05.05.2011, 00:59  [ТС]     typedef struct .... #15
Ура, разобрался. Надо делать так:
C++
1
 cout<<ssq.имя_члена<<"\n";//для вывода значений члена структуры
Наконецто получилось.
Всем спасибо, особенно faskedу.

Добавлено через 6 часов 49 минут

Не по теме:

bober94, Я так понимаю ты тоже хочеш юзать SSQ.dll ?
Давай юзать вместе.

Yandex
Объявления
05.05.2011, 00:59     typedef struct ....
Ответ Создать тему
Опции темы

Текущее время: 01:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru