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

typedef struct ....

04.05.2011, 17:01. Просмотров 2988. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2011, 17:01
Ответы с готовыми решениями:

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

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

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

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

14
154 / 146 / 20
Регистрация: 12.03.2011
Сообщений: 807
04.05.2011, 17:26 2

Не по теме:

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



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

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

Не по теме:

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

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

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

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2011, 00:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Для чего 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; }...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.