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

typedef struct ....

04.05.2011, 17:01. Показов 4515. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru