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

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

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

typedef struct .... - C++

04.05.2011, 17:01. Просмотров 2176. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 17:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос typedef struct .... (C++):

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

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

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

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

Волшебные вещи с typedef struct - C++
у меня сейчас мозг взорвется не пойму в чем ошибка,где я не так делаю? #include <stdio.h> #include <locale.h> #include <stdlib.h> ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SergeyS
153 / 145 / 6
Регистрация: 12.03.2011
Сообщений: 807
04.05.2011, 17:26 #2

Не по теме:

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



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

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

Не по теме:

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

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

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

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 00:59
Привет! Вот еще темы с ответами:

Typedef - C++
Наткнулся на пример ниже: typedef char *cstring; //Каков тип переменной cstr в следующем объявлении: const cstring cstr; ...

typedef - C++
double f(double x){ } typedef double (*TPF)(double); TPF fff = f; fff(10.0); как и почему это работает корректно, если в...

Typedef - C++
Доброго времени суток. Привожу вам отрывок из книги &quot;C и Visual C++ 2008 для начинающих&quot;. В книге приведен пример объявления структуры с...

typedef в c++ - C++
Здравствуйте! Нужно собрать полную информацию по оператору typedef в c++. Пока нашел, что typedef используется для задания новых...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.05.2011, 00:59
Ответ Создать тему
Опции темы

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