Автор Тема: Структури в c  (Прочетена 2796 пъти)

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Структури в c
« -: Mar 19, 2006, 22:38 »
Здравейте. Уча C и колкото и да ме е срам забих на "Структури". Става дума за това че не мога да схвана общия синтаксин на този фрагмент за пример :
Примерен код

struct time
{
int hour;       /* променлива за часовете */
int min;        /* променлива за минутите */
float sec;     /* променлива за секундите */
} u,v,t;

Примерен код
struct time u,v,t

В книгата от която чета е обяснено като че ли не както трябва. Съответно не мога да вникна в синтаксиса.
Като например какви са тези променливи u,v,t и за какво са, при положение че вече има три променливи за часове минути и секунди.
Като цяло ми е трудно да формулирам точен въпрос, за това се надявам някой просто да ми даде инфо за тези структури и техния синтаксис. Ако е възможно разбира се. Благодаря предварително.
Активен

danchev

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
Структури в c
« Отговор #1 -: Mar 19, 2006, 23:17 »
В случая u,v,t (както си ги дал след декларацията на структурата) се явяват променливи от тип struct time ;-) и за тях се заделя място в паметта. Тези нямат нищо общо със самите членове на структурата (изброени вътре в нея ;-) - hour, min, sec.

Не си длъжен след декларацията на структурата да деклариращ и променливи от този тип.
Т.е. може да декларираш струтурата:
struct time
{
int hour;       /* променлива за часовете */
int min;        /* променлива за минутите */
float sec;     /* променлива за секундите */
};
и после да кажеш те тази променлива е от този тип който току що горе декларирах:
struct time u

Структурите в C са като записите в Pascal, т.е. агрегатен тип сътворяван (измислян) от потребителя. Фасулска работа ;-)
Активен

ivak

  • Напреднали
  • *****
  • Публикации: 156
    • Профил
Структури в c
« Отговор #2 -: Mar 20, 2006, 10:08 »
Цитат (danchev @ Март 19 2006,23:17)
Не си длъжен след декларацията на структурата да деклариращ и променливи от този тип.
Т.е. може да декларираш струтурата:
struct time
{
int hour;       /* променлива за часовете */
int min;        /* променлива за минутите */
float sec;     /* променлива за секундите */
};
и после да кажеш те тази променлива е от този тип който току що горе декларирах:
struct time u


обаче трябва да я декларираш като тип:

typedef struct time { ... };

освен това С-то има една особеност на синтаксиса, която ти позволява да не пишеш всеки път struct time, когато декларираш променливи от този тип. ако го декларираш така:

typedef struct time { ... } time;

после можеш да декларираш променливите като:

time t, u, v;
Активен

Cлoжнитe пpoблeми имaт пpocти и лecни зa paзбиpaнe гpeшни oтгoвopи.

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Структури в c
« Отговор #3 -: Mar 21, 2006, 17:20 »
Благодаря за отговорите. Значи структурите представляват дефиниран от програмиста тип. Но въпреки това не успях да схвана смисъла на тези три реда :
Примерен код
int hour;       /* променлива за часовете */
int min;        /* променлива за минутите */
float sec;     /* променлива за секундите */
Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Структури в c
« Отговор #4 -: Mar 21, 2006, 17:42 »
Еми именно трите посочени реда дефинират какво ще съдържа структурата.

Цитат

struct time
{
int hour;       /* променлива за часовете */
int min;        /* променлива за минутите */
float sec;     /* променлива за секундите */
} u,v,t;


В случая имаш три променливи от тази структура и за всяка от променливите имаш по три полета, съответно hour, min и sec.

Не знам как по ясно да го обясня. Ето:

Примерен код

u.hour = 10;
u.min = 12;
u.sec = 0.0;
/* горните три реда присвояват на u часа 10:12:00, като часа отива в hour, минутите в min, секундите в sec */


А защо секундите са float вече не мога да кажа, това автора на кода ще го каже :-)
Активен

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Структури в c
« Отговор #5 -: Mar 21, 2006, 18:22 »
Да, и аз така предполагах, но имаше нещо друго което като че ли ме обърка. Както и да е, явно е било без значение. Мерси за помоща. '<img'>
Активен

  • Гост
Структури в c
« Отговор #6 -: Apr 12, 2006, 21:54 »
Почти сам готов да се обзаложа, че си се объркал от
typedef struct time {
init hour
............
} u, v, t;

тоест за какво са ти тея u, v, t
Идеята тука е, че не може да достъпваш променливите на структурата time директно hour =3; или посочвайки самата структура time.hour=3;
Това става именно с u, v, t, като трябва да имаш предвид, както бе споменато, че u.hour=3; и v.hour = 3; нямат нищо общо помежду си. променяйки стойността на едното няма да засегнеш стойността на другото. За всяка една от тях се заделя отделна памет.
Ако ти е по- лесно представи си го като потребител u, v и t, като стойностите които въвежда единия не засягат стойностите въведени от другия.
Активен