Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для LedZeppelin
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68

typedef struct ....

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

Студворк — интернет-сервис помощи студентам
Здравствуейте. Обьясните пожалуйсто новичку что означает этот код.
C++
1
2
3
4
5
6
typedef struct
{
    long num_servers;
    long data_size;
    char* data;
}SSQ_BATCH_REPLY,*PSSQ_BATCH_REPLY;
и как мне получить доступ к членам этой структуры через указатель и просто как к переменным?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2011, 17:01
Ответы с готовыми решениями:

typedef struct
Ребята, нужна помощь. Первый раз использую typedef struct. Вроде бы всё работает, но хочу удостовериться по причине: это мой уже 2-ой...

Typedef struct
Здравствуйте форумчане. С недавних пор пытаюсь научиться работать с микроконтроллерами. Параллельно изучаю С\С++. Так вот у меня...

typedef struct
а зачем вы используете конструкцию typedef struct name{...} ? и какие она дает преимущества в отличии от struct name{...}

14
 Аватар для SergeyS
154 / 146 / 20
Регистрация: 12.03.2011
Сообщений: 806
04.05.2011, 17:26

Не по теме:

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



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

Обьявлять экземпляр так:
C++
1
SSQ_BATCH_REPLY batch_reply
А вот насчёт доступа не помню. К первому типу вроде обычно через точку, а ко второму через указатель.
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.05.2011, 17:27
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 позволяет этого не делать, поэтому зачастую имя для структуры просто не пишется. Правда есть исключения, когда писать имена приходится.
2
 Аватар для LedZeppelin
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:29  [ТС]
Дело в том что есть функция которая принимает в качестве аргумента указатель на эту структуру и заполняет её.
C++
1
2
3
BOOL WINAPI SSQ_FormatBatchReply(
    PSSQ_BATCH_REPLY
);
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.05.2011, 17:31
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Дело в том что есть функция которая принимает в качестве аргумента указатель на эту структуру и заполняет её.
А вы не можете передать указатель на структуру?
1
 Аватар для LedZeppelin
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:33  [ТС]
Вот вот, мне нужно передать этот самый указатель. Далее функция заполнит структуру, а потом мне надо получить все члены структуры (например вывести их в консоль,, но как ??)
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.05.2011, 17:37
Цитата Сообщение от 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;
1
 Аватар для LedZeppelin
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:40  [ТС]
fasked, Компиллятор сообщил ошибку: invalid conversion from 'BOOL' to 'SSQ_BATCH_REPLY*'
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.05.2011, 17:47
Цитата Сообщение от LedZeppelin Посмотреть сообщение
А вот &ssq обязательно передавать со знаком & ?
Знак амперсанд (&) позволяет взять адрес переменной, что и есть указатель. Этого делать не обязательно, если Вы уже управляете указателем. Если взять адрес указателя, то получится двойной указатель.
В данном случае ssq - это сам объект. Поэтому да, обязательно.
1
 Аватар для LedZeppelin
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
04.05.2011, 17:55  [ТС]
fasked, А как теперь получить доступ к членам струкуты. Например я хочу вывести их с помощью cout. Собственно ради получения этих данных вся затея.

Не по теме:

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

0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.05.2011, 17:56
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Компиллятор сообщил ошибку: invalid conversion from 'BOOL' to 'SSQ_BATCH_REPLY*'
Покажите свой код и убедитесь, что Вы правильно указали нам прототип.
Я же объяснил, что функция принимает указатель, знак амперсанда берет адрес от переменной, что и есть указатель.
1
 Аватар для SergeyS
154 / 146 / 20
Регистрация: 12.03.2011
Сообщений: 806
04.05.2011, 17:57
Нужно просто передавать так:
C++
1
2
PSSQ_BATCH_REPLY reply;
SSQ_FormatBatchReply(reply);
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.05.2011, 17:58
bober94, а память кто выделять будет? ничего, что объекта не существует и программа просто рухнет при обращении к случайному адресу?
головой надо думать прежде, чем советовать.
2
 Аватар для SergeyS
154 / 146 / 20
Регистрация: 12.03.2011
Сообщений: 806
04.05.2011, 18:00
Цитата Сообщение от fasked Посмотреть сообщение
bober94, а память кто выделять будет? ничего, что объекта не существует и программа просто рухнет при обращении к случайному адресу?
головой надо думать прежде, чем советовать.
Точно, забыл
1
 Аватар для LedZeppelin
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
05.05.2011, 00:59  [ТС]
Ура, разобрался. Надо делать так:
C++
1
 cout<<ssq.имя_члена<<"\n";//для вывода значений члена структуры
Наконецто получилось.
Всем спасибо, особенно faskedу.

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

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2011, 00:59
Помогаю со студенческими работами здесь

typedef struct + TXT
Такое вот задание.. есть TXT файл, пропарсить смогу сам, а дальше не знаю что делать, допустим, считали данные : Строка :...

Волшебные вещи с typedef struct
у меня сейчас мозг взорвется не пойму в чем ошибка,где я не так делаю? #include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include...

Для чего typedef struct
Часто в &quot;профессиональном&quot; коде вижу - typedef struct MyStruct { // ... } MyStuct; даёт ли это какие то преимущества перед...

Программа через структуру typedef struct
Люди помогите если несложно с программой, задание таково: 1.С клавиатуры вводятся пункты структуры - Студент: Матрикул - номер...

Нюансы синтаксиса: что означает данная запись typedef struct S { T field; } s; ?
Есть следующий код typedef struct _IO_COMPLETION_CONTEXT { PVOID Port; PVOID Key; } IO_COMPLETION_CONTEXT; Меня не интересует...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru