Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: Apache в Mar 19, 2006, 22:38



Титла: Структури в c
Публикувано от: Apache в 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 и за какво са, при положение че вече има три променливи за часове минути и секунди.
Като цяло ми е трудно да формулирам точен въпрос, за това се надявам някой просто да ми даде инфо за тези структури и техния синтаксис. Ако е възможно разбира се. Благодаря предварително.


Титла: Структури в c
Публикувано от: danchev в 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, т.е. агрегатен тип сътворяван (измислян) от потребителя. Фасулска работа ;-)


Титла: Структури в c
Публикувано от: ivak в 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
Публикувано от: Apache в Mar 21, 2006, 17:20
Благодаря за отговорите. Значи структурите представляват дефиниран от програмиста тип. Но въпреки това не успях да схвана смисъла на тези три реда :
Примерен код
int hour;       /* променлива за часовете */
int min;        /* променлива за минутите */
float sec;     /* променлива за секундите */


Титла: Структури в c
Публикувано от: Hapkoc в 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 вече не мога да кажа, това автора на кода ще го каже :-)


Титла: Структури в c
Публикувано от: Apache в Mar 21, 2006, 18:22
Да, и аз така предполагах, но имаше нещо друго което като че ли ме обърка. Както и да е, явно е било без значение. Мерси за помоща. :)


Титла: Структури в c
Публикувано от: в 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, като стойностите които въвежда единия не засягат стойностите въведени от другия.