|
Помогите со структурой, объявление и использование структуры |
|
|
|
Feb 2 2007, 13:02
|
Участник

Группа: Новичок
Сообщений: 34
Регистрация: 25-01-07
Пользователь №: 24 755

|
Помогите пожалуйста! есть вот такая структура: Код typedef struct{ unsigned char second; unsigned char minute; unsigned char hour; }time; вот никак не могу разобраться с двумя вещами: 1)что означает строчка после структуры Код time t; 2)и потом в тексте прогрмаммы Код t.x=...; t.y=...;... вроде как обращение к члену структуры можно делать как "имя структуры.имя члена", но в данном случае у структуры нет имени. Тогда что такое time t; после описания структуры В общем полная непонятка.
|
|
|
|
|
Feb 2 2007, 13:10
|
Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905

|
Структура это почти тоже самое что и класс. У Вас имя структуры time. Имя структуры пишется в конце. Строчка time t - это вы создаёте экземпляр структуры (подобно созданию экземпляра класса). А потом в программе вы уже работаете с экземпляром структуры - t. И соответственно к членам структуры вы обращаетесь через "." (например, t.hour)
|
|
|
|
|
Feb 2 2007, 13:11
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(day177 @ Feb 2 2007, 16:02)  1)что означает строчка после структуры Код time t; Помоему в самом верху определяется тип данных time, как выше указанная структура. Значит t - экземпляр типа time. Экземпляр структуры то бишь.
Сообщение отредактировал mihask - Feb 2 2007, 13:13
|
|
|
|
|
Feb 2 2007, 13:13
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(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; после описания структуры В общем полная непонятка.  time - это новый тип данных, имеющий вид структуры. time t; - объявление переменной типа time. t.x, t.y - в данном случае не имеет смысла, поскольку в структуре нет полей с такими именами.
|
|
|
|
|
Feb 2 2007, 13:26
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(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; }
Сообщение отредактировал mihask - Feb 2 2007, 13:30
|
|
|
|
|
Feb 2 2007, 13:29
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Я конечно не супер разбираюсь, но насколько я читал/понял для того чтобы ввести тег структуры необходимо писать по другому Вот так. Код 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; Таким образом у Вас что-то не то написано.
|
|
|
|
|
Feb 2 2007, 13:40
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(SasaVitebsk @ Feb 2 2007, 16:29)  Если же написано так как было написано, то есть: Код typedef struct{ unsigned char second; unsigned char minute; unsigned char hour; }time; То сразу объявлен экземпляр структуры. И можно сразу его использовать. Я, к примеру так и делаю. То есть. Код time.second = 5; Таким образом у Вас что-то не то написано. Помоему там typedef весь смысл объявления меняет. С typedef получается не объявление экземпляра структуры, а объявление нового типа данных. т.е time - это новый тип данных.
Сообщение отредактировал mihask - Feb 2 2007, 13:42
|
|
|
|
|
Feb 2 2007, 13:40
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(SasaVitebsk @ Feb 2 2007, 13:29)  Если же написано так как было написано, то есть: То сразу объявлен экземпляр структуры. И можно сразу его использовать. Я, к примеру так и делаю. Таким образом у Вас что-то не то написано. Экземпляр структуры объявляется в обеих случаях. Но, когда есть typedef, объявляется ещё и тип данных.
|
|
|
|
|
Feb 2 2007, 13:41
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(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; - присвоение значения одному из полей структуры.
|
|
|
|
|
Feb 2 2007, 13:51
|
Участник

Группа: Новичок
Сообщений: 34
Регистрация: 25-01-07
Пользователь №: 24 755

|
имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память
|
|
|
|
|
Feb 2 2007, 13:55
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(day177 @ Feb 2 2007, 13:51)  имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память Это совсем не обязательно. Объявить структуру можно в одном файле (например, в заголовочном), а переменные данной структуры могут быть определены в другом файле. И вообще, в чем собственно вопрос?
|
|
|
|
|
Feb 2 2007, 13:56
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(day177 @ Feb 2 2007, 16:51)  имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память Это все правильно, если нет typedef, прошу обратить внимание на предыдущий пост, на "Отправлено #9"
Сообщение отредактировал mihask - Feb 2 2007, 13:57
|
|
|
|
|
Feb 2 2007, 14:08
|
Участник

Группа: Новичок
Сообщений: 34
Регистрация: 25-01-07
Пользователь №: 24 755

|
ой - прошу прощения, только что заметил что не целиком скопировал вставил. В оригинале вот так: Код typedef struct{ unsigned char second; unsigned char minute; unsigned char hour; }time; ПС это пример из CodeVisionAVR - AVR134
|
|
|
|
|
Feb 2 2007, 14:11
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

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

Группа: Новичок
Сообщений: 34
Регистрация: 25-01-07
Пользователь №: 24 755

|
и опять накосячил - что-то седня день не задался. В общем так: Код typedef struct{ unsigned char second; unsigned char minute; unsigned char hour; }time;
time t; потом в тексте программы используются записи вида Код t.minute=... t.second=... t.hour=...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|