Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите со структурой
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
day177
Помогите пожалуйста! есть вот такая структура:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
}time;

вот никак не могу разобраться с двумя вещами: 1)что означает строчка после структуры
Код
time t;

2)и потом в тексте прогрмаммы
Код
t.x=...; t.y=...;...

вроде как обращение к члену структуры можно делать как "имя структуры.имя члена", но в данном случае у структуры нет имени. Тогда что такое time t; после описания структуры В общем полная непонятка. help.gif
T&D
Структура это почти тоже самое что и класс. У Вас имя структуры time. Имя структуры пишется в конце.
Строчка time t - это вы создаёте экземпляр структуры (подобно созданию экземпляра класса).
А потом в программе вы уже работаете с экземпляром структуры - t.
И соответственно к членам структуры вы обращаетесь через "." (например, t.hour)
mihask
Цитата(day177 @ Feb 2 2007, 16:02) *
1)что означает строчка после структуры
Код
time t;


Помоему в самом верху определяется тип данных time, как выше указанная структура.
Значит t - экземпляр типа time. Экземпляр структуры то бишь.
_Bill
Цитата(day177 @ Feb 2 2007, 13:02) *
Помогите пожалуйста! есть вот такая структура:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
}time;

вот никак не могу разобраться с двумя вещами: 1)что означает строчка после структуры
Код
time t;

2)и потом в тексте прогрмаммы
Код
t.x=...; t.y=...;...

вроде как обращение к члену структуры можно делать как "имя структуры.имя члена", но в данном случае у структуры нет имени. Тогда что такое time t; после описания структуры В общем полная непонятка. help.gif

time - это новый тип данных, имеющий вид структуры.
time t; - объявление переменной типа time.
t.x, t.y - в данном случае не имеет смысла, поскольку в структуре нет полей с такими именами.
mihask
Цитата(day177 @ Feb 2 2007, 16:02) *
2)и потом в тексте прогрмаммы
Код
t.x=...; t.y=...;...


Возможно это другая переменная t - локальная переменная другой функции, внутри которой
определен другой тип данных(другая структура с полями x и y) для этой переменной.

Там можетбыть что-то типа:

Код

void Keyboard (void) __task
         {
    

typedef struct{
unsigned char y;
unsigned char x;
}z;
z t;
    
     t.y=5;
     t.x=7;
         }
SasaVitebsk
Я конечно не супер разбираюсь, но насколько я читал/понял для того чтобы ввести тег структуры необходимо писать по другому

Вот так.

Код
struct time {
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
};

time t;

...

t.second = 5;


Если же написано так как было написано, то есть:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
}time;


То сразу объявлен экземпляр структуры. И можно сразу его использовать. Я, к примеру так и делаю. То есть.
Код
time.second = 5;


Таким образом у Вас что-то не то написано.
mihask
Цитата(SasaVitebsk @ Feb 2 2007, 16:29) *
Если же написано так как было написано, то есть:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
}time;


То сразу объявлен экземпляр структуры. И можно сразу его использовать. Я, к примеру так и делаю. То есть.
Код
time.second = 5;


Таким образом у Вас что-то не то написано.


Помоему там typedef весь смысл объявления меняет. С typedef получается не объявление экземпляра структуры, а
объявление нового типа данных. т.е time - это новый тип данных.
pokos
Цитата(SasaVitebsk @ Feb 2 2007, 13:29) *
Если же написано так как было написано, то есть:
То сразу объявлен экземпляр структуры. И можно сразу его использовать. Я, к примеру так и делаю. Таким образом у Вас что-то не то написано.

Экземпляр структуры объявляется в обеих случаях. Но, когда есть typedef, объявляется ещё и тип данных.
_Bill
Цитата(SasaVitebsk @ Feb 2 2007, 13:29) *
Я конечно не супер разбираюсь, но насколько я читал/понял для того чтобы ввести тег структуры необходимо писать по другому

Вот так.

Код
struct time {
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
};

time t;

...

t.second = 5;


Если же написано так как было написано, то есть:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
}time;


То сразу объявлен экземпляр структуры. И можно сразу его использовать. Я, к примеру так и делаю. То есть.
Код
time.second = 5;


Таким образом у Вас что-то не то написано.

НЕВЕРНО! typedef дает возможность определять новые типы данных, он избавляет от необходимости каждый раз выписывать теги структур при объявлении переменных структурного типа. В дпнном случае time - тип данных, t - переменная этого типа, t.second = 5; - присвоение значения одному из полей структуры.
day177
имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память
_Bill
Цитата(day177 @ Feb 2 2007, 13:51) *
имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память

Это совсем не обязательно. Объявить структуру можно в одном файле (например, в заголовочном), а переменные данной структуры могут быть определены в другом файле. И вообще, в чем собственно вопрос?
mihask
Цитата(day177 @ Feb 2 2007, 16:51) *
имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память


Это все правильно, если нет typedef, прошу обратить внимание на предыдущий пост, на "Отправлено #9"
day177
ой - прошу прощения, только что заметил что не целиком скопировал вставил. В оригинале вот так:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;
}time;


ПС это пример из CodeVisionAVR - AVR134
_Bill
Цитата(day177 @ Feb 2 2007, 14:08) *
ой - прошу прощения, только что заметил что не целиком скопировал вставил. В оригинале вот так:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;
}time;


ПС это пример из CodeVisionAVR - AVR134

Ну, и..? Что именно смущает?
day177
и опять накосячил - что-то седня день не задался. В общем так:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;
}time;

time t;


потом в тексте программы используются записи вида
Код
t.minute=...
t.second=...
t.hour=...
_Bill
Цитата(day177 @ Feb 2 2007, 14:16) *
и опять накосячил - что-то седня день не задался. В общем так:
Код
typedef struct{
unsigned char second;
unsigned char minute;
unsigned char hour;
}time;

time t;


потом в тексте программы используются записи вида
Код
t.minute=...
t.second=...
t.hour=...

Ну все правильно! Что непонятно? time - новый тип данных, обяъявленный через оператор typedef (type definition). t - переменная типа time.
SasaVitebsk
Вот соловей, - глаза мои невидящие. smile.gif На typedef не обратил внимания. Я обычно либо напрямую объявляю либо ч/з тег структуры.

Посмотрел внимательней, я даже пару ошибок внёс. sad.gif
Правильней вот так, или ч/з определение нового типа, как выше.

Код
struct time {
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
};

struct time t;

...

t.second = 5;
_Bill
Цитата(SasaVitebsk @ Feb 2 2007, 15:05) *
Вот соловей, - глаза мои невидящие. smile.gif На typedef не обратил внимания. Я обычно либо напрямую объявляю либо ч/з тег структуры.

Посмотрел внимательней, я даже пару ошибок внёс. sad.gif
Правильней вот так, или ч/з определение нового типа, как выше.

Код
struct time {
unsigned char second;
unsigned char minute;
unsigned char hour;                                          
};

struct time t;

...

t.second = 5;

Все правильно. Это как раз то, о чем я сказал выше. В таких случаях каждый раз приходится выписывать struct time. C typedef все получается и короче, и нагляднее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.