Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: объявление структуры  (Прочитано 12452 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
dorador
Гость
« : 18-02-2004 14:00 » 

в чем разница(если есть)/преимущества/недостатки
при таком объявлении структуры
Код:

typedef struct _CMD |
   long code;
   void *arg;
" CMD;

и при таком
Код:

typedef struct  |
   long code;
   void *arg;
" CMD;
Записан
Anchorite
Гость
« Ответ #1 : 18-02-2004 16:10 » 

В первом случае ты создаешь тип struct _CMD  и даешь ему псевдоним CMD.
Во втором случае ты создаешь безымянный тип и даешь ему название CMD.
В твоем случае особой разницы нет.
Записан
Mfcer__
Команда клуба

ru
Offline Offline

« Ответ #2 : 18-02-2004 19:42 » 

А еще зацените вот такой способ обявления (c) Microsoft из Ras.h:
Код:

#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA
|
    DWORD dwSize;
    CHAR  szEntryName[ RAS_MaxEntryName + 1 (;
    CHAR  szPhoneNumber[ RAS_MaxPhoneNumber + 1 (;
    CHAR  szCallbackNumber[ RAS_MaxCallbackNumber + 1 (;
    CHAR  szUserName[ UNLEN + 1 (;
    CHAR  szPassword[ PWLEN + 1 (;
    CHAR  szDomain[ DNLEN + 1 (;
#if )WINVER >= 0x401:
    DWORD dwSubEntry;
    ULONG_PTR dwCallbackId;
#endif
";
Записан
dorador
Гость
« Ответ #3 : 19-02-2004 10:04 » 

Anchorite, что я создаю я понимаю. а вот могут ли быть какие-то теоретические случаи, когда станет заметна разница при применении этих объявлений?
Mfcer__,
Цитата

#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA

это применение #define вместо typedef - какой-то старый стиль наверное
теперь они написали бы
Код:

typedef struct tagRASDIALPARAMSA
|
....
" RASDIALPARAMSA;
Записан
Anchorite
Гость
« Ответ #4 : 19-02-2004 20:47 » 

Будет, когда начнешь объявлять структуры, внутри которых имеются указатели на самих себя. Например

struct stack {
  int data;
  struct stack* pNext;
};

Как видишь, в этом случае приходится использовать конструкцию struct Name
Записан
Mfcer__
Команда клуба

ru
Offline Offline

« Ответ #5 : 19-02-2004 21:25 » 

Цитата

struct stack {
int data;
struct stack* pNext;
};

что то я запутался- и как создавать объекты такой структуры ...
типа
Код:

struct stack *simple = new stuct stack;
simple->data = 5;
simple->pNext = new )что тут писать:
Записан
Anchorite
Гость
« Ответ #6 : 20-02-2004 03:55 » new

struct stack {
int data;
struct stack* pNext;
};

typedef struct stack STACK;

STACK* topOpStack = NULL;

....

void push(int n) {
STACK* newTop = new STACK;
newTop->data = n;
newTop->pNext = topOfStack;
topOfStack = newTop;
}

int pop(int* pData) {
if (topOfStack == NULL)
return -1;
else if (pData == NULL)
return -1;

pData = topOfStack->data;
STACK temp = topOfStack;
topOfStack = topOfStack->pNext;
delete temp;
return 0;
}

Примерно так
Записан
Mfcer__
Команда клуба

ru
Offline Offline

« Ответ #7 : 22-02-2004 19:07 » 

Цитата

pData = topOfStack->data;
STACK *temp = topOfStack;
topOfStack = topOfStack->pNext;
delete temp;
return 0;

Спасибо за ответ но тут кажется ошибочка вышла
Записан
Anchorite
Гость
« Ответ #8 : 23-02-2004 07:53 » 

Действительно, забыл поставить звездочку.
Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #9 : 26-02-2004 10:17 » 

ну даже если звездочку поставить, это все равно работать не будет
Цитата

int pop(int * pData)
{
....

pData = topOfStack->data;
...
}

надо либо так писать
int pop(int* pData)
{
...

*pData = topOfStack->data;
...
}
и так юзать
int data;
pop(&data);

либо так
int pop(int & pData)
{
...

pData = topOfStack->data;
...
}
а юзать так
int data;
pop(data);
Записан

С уважением Lapulya
Anchorite
Гость
« Ответ #10 : 26-02-2004 17:26 » 

Тоже согласен. Просто я и не пытался этот код компилировать. При попытке скомпилировать его все бы это всплыло сразу же.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines