реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите со структурой, объявление и использование структуры
day177
сообщение Feb 2 2007, 13:02
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 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; после описания структуры В общем полная непонятка. help.gif
Go to the top of the page
 
+Quote Post
T&D
сообщение Feb 2 2007, 13:10
Сообщение #2





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



Структура это почти тоже самое что и класс. У Вас имя структуры time. Имя структуры пишется в конце.
Строчка time t - это вы создаёте экземпляр структуры (подобно созданию экземпляра класса).
А потом в программе вы уже работаете с экземпляром структуры - t.
И соответственно к членам структуры вы обращаетесь через "." (например, t.hour)
Go to the top of the page
 
+Quote Post
mihask
сообщение Feb 2 2007, 13:11
Сообщение #3


Частый гость
**

Группа: 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
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 2 2007, 13:13
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 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; после описания структуры В общем полная непонятка. help.gif

time - это новый тип данных, имеющий вид структуры.
time t; - объявление переменной типа time.
t.x, t.y - в данном случае не имеет смысла, поскольку в структуре нет полей с такими именами.
Go to the top of the page
 
+Quote Post
mihask
сообщение Feb 2 2007, 13:26
Сообщение #5


Частый гость
**

Группа: 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
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 2 2007, 13:29
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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;


Таким образом у Вас что-то не то написано.
Go to the top of the page
 
+Quote Post
mihask
сообщение Feb 2 2007, 13:40
Сообщение #7


Частый гость
**

Группа: 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
Go to the top of the page
 
+Quote Post
pokos
сообщение Feb 2 2007, 13:40
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445



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

Экземпляр структуры объявляется в обеих случаях. Но, когда есть typedef, объявляется ещё и тип данных.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 2 2007, 13:41
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 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; - присвоение значения одному из полей структуры.
Go to the top of the page
 
+Quote Post
day177
сообщение Feb 2 2007, 13:51
Сообщение #10


Участник
*

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



имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 2 2007, 13:55
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(day177 @ Feb 2 2007, 13:51) *
имя структуры объявляется после зарезервированного слова "struct" перед "{", а после "}" объявляются переменные, принадлежащие структуре, под которые выделяется память

Это совсем не обязательно. Объявить структуру можно в одном файле (например, в заголовочном), а переменные данной структуры могут быть определены в другом файле. И вообще, в чем собственно вопрос?
Go to the top of the page
 
+Quote Post
mihask
сообщение Feb 2 2007, 13:56
Сообщение #12


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



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


Это все правильно, если нет typedef, прошу обратить внимание на предыдущий пост, на "Отправлено #9"

Сообщение отредактировал mihask - Feb 2 2007, 13:57
Go to the top of the page
 
+Quote Post
day177
сообщение Feb 2 2007, 14:08
Сообщение #13


Участник
*

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



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


ПС это пример из CodeVisionAVR - AVR134
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 2 2007, 14:11
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 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

Ну, и..? Что именно смущает?
Go to the top of the page
 
+Quote Post
day177
сообщение Feb 2 2007, 14:16
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 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=...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01576 секунд с 7
ELECTRONIX ©2004-2016