|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 9:08 am
|
Страница 1 от 1
|
[ 12 мнения ] |
|
| Автор |
Съобщение |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
 Struct and Union в С
Колеги ,от година се занимавам със С,а преди това пишех само на асемблер.Толкова ли съм тъп,не мога да ги схвана тия Struct и Union и каква е разликата между тях.Ясно е че се групират и дефинират променливи които са свързани с едно и,също нещо например като времена на часовник при които да се задейства аларма.Дали ще ползвам структура или не аз задължително
трябва да дефинирам някакви области които съдържат тези времена.Не мога ли да си ползвам много по -пряк начин, например:
int i;
for (i = 0; v < 10; i++)
{
if(Alarm_hour[i]==Hour && Alarm_min[i]==Min) {................................}
}
..................................
(Същото може да се направи и с пойнтери)
отколкото да си отварям работа да пиша от коя структура е елемента и кой е той.Не е ли това излишно усложнение на програмата и напълно безмислено.
ще ви бъда благодарен ,ако някой ми разясни същността на тези Struct и Union и да даде пример с какво могат да са полезни те.
|
| Пон Яну 30, 2006 1:19 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Re: Struct and Union в С
Юниъна е структура, на която всички мембъри почват от един и същ адрес. Докато при нормална структура са наредени последователно.
|
| Пон Яну 30, 2006 1:39 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
той реконструктора го каза ясно технически, обаче да вметна каква е идеята на цялата далавера.
приложението на унионите е доста различно от структурите, и обикновено се ползват вътре във структура, рядко съм виждал извън. идеята е че данните понякога е удобно да се виждат по различен начин. например може да искаш да виждаш един мембър от тип вектор, или 3 мембъра от тип флот, които са всъщност полетата на вектора. аз лично, ползвам унионите почти изцяло за съвместимост със стари структури и класове. често става така, че имам някакви полета в старите структури, за които после поради честата употреба съм направил отделен пакетиращ клас/структура, който си има разни автоматики с които се ползва суперудобно. как да стане така, че старите ми структури, които съдържат полетата разхвърляно, да могоат да се ползват от новите благинки? точно униона му е майката. ето един пример, който си е напълно реален:
|
| Пон Яну 30, 2006 8:23 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Друго "полезно" приложение е да си направиш една цяла структура с най-разни типове променливи да се вижда и като масив от байтове. Губи се пригледността, но пък е много лесно да се предава / приема побайтово, например по сериен канал. Не че със поинтери няма да стане, ама така по-бързо се пише.
|
| Пон Яну 30, 2006 8:28 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Уцели десятката.  Точно за това се използва най-често, да може да една структура да изглежда като масив. Една извадка от комуникационния ми модул:
|
| Пон Яну 30, 2006 8:38 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
sizeof това онова не ползваш ли? 
|
| Пон Яну 30, 2006 8:58 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
char zaphod[sizeof(some_struct)]; // За това ли става дума?
Иначе, ако се усетиш, че в структурата трябва да вмъкнеш още един int и трябва да преглеждаш и редактираш целия си сорс.
|
| Пон Яну 30, 2006 9:06 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
To e C++ specific бе. 
|
| Пон Яну 30, 2006 9:15 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
А моето ANSI си го вдява без да му е грижа.
Дали пък не е "миропомазано" още от Кънигам и Ричи? 
|
| Пон Яну 30, 2006 9:43 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
и в IAR става катo пишеш на чисто C
|
| Пон Яну 30, 2006 10:28 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Да бе, верно. Нещо съм се ошашкал. 
|
| Пон Яну 30, 2006 10:49 pm |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
глупости ! (отбелязвам факта).
sizeof въобще не е C++ specific. влиза си и в ANSI C стандарта.
|
| Вто Яну 31, 2006 1:12 am |
|
|
|
Страница 1 от 1
|
[ 12 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|