Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Featured Replies

Запомни го така - създаваш пойнтер от типа, а не пойнтер към типа! За всяка пойнтер променлива е нужна звездичка!

  • Автор

Някой който има време и би могъл да разясни малко това, ще му бъда благодарен.

Знам че става въпрос за обединяване на структури, или по точно една структура да изразява друга.

Nesting structures

Structures can also be nested so that a valid element of a structure can also be in its turn another structure.

	struct movies_t {
  string title;
  int year;
};

struct friends_t {
  string name;
  string email;
  movies_t favorite_movie;
  } charlie, maria;

friends_t * pfriends = &charlie;

По-конкретно ме интересува това -friends_t * pfriends = &charlie; Като идея знам какво представлява, но не мога да го асимилирам. friends_t е структура, * pfriends е dereference, &charlie e адреса на charlie.

After the previous declaration we could use any of the following expressions:

charlie.name
maria.favorite_movie.title
charlie.favorite_movie.year
pfriends->favorite_movie.year

(where, by the way, the last two expressions refer to the same member).

Редактирано от viiipeer (преглед на промените)

Виж сега как изглежда разплетената дамаджана :

1. charlie и maria са инстанцирани променливи от тип friends_t - всяка от тях заема място на определен адрес от паметта, което е заделено само за нея.

2. pfriends е променлива която евентуално ще съдържа адрес към началото на сегмент от паметта, в който е разпъната променлива от типа friends_t. Оператора * в случая не служи за дереференсване, а има за задача именно да покаже, че това е указател, а не променлива (има декларативно предназначение).

3. Тъй като charlie е инстанция, а pfriends е указател - то операциите между тях са несъвместими (не може да вадим ябълки от круши и да получим пак ябълки). За да ги съвместим, трябва да ги уеднаквим. Уеднаквяването става с помощта на оператор &. Този оператор измъква адреса към началото на сегмента от паметта, в който е разпъната променливата, към която е записан. В нашия случай това е адреса на инстанцията charlie. Сега вече имаме два адреса и нищо не може да ни попречи да ги приравним. След изпълнение на инструкцията friends_t * pfriends = &charlie;, указател-променливата pfriends, ще съдържа адреса на инстанцията charlie.

4. Първите три израза от списъка са ясни - там достъпваш член-променливи с различна дълбочина от инстанциите charlie и maria. Нека коментираме четвъртия израз. Оператора да достъп . (оператора точка), е валиден само върху инстанции на структури (и класове). Ние обаче разполагаме с указател (който в същината си е целочислен тип - с различна големина в зависимост от платформата и операционната система), следователно . е неприложим оператор. За това е предвиден оператора -> (комплексен оператор за достъп), който в същността си казва отиди на посочения от променливата адрес, прочети паметта по посочения от типа начин (тази операция се нарича дереференсване) и приложи оператор за достъп за да измъкнем стойността на член променливата favorite_movie. Тъй като тази член-променлива е дефинирана като инстанция, то за нея е приложим оператора ., който ни дава достъп до член-променливата year.

Нещата не са толкова сложни - но не са и прости. Трябва много да внимаваш. Прочети си книжката пак - ако не разбираш търси подобен ресурс на български. И много упражнения - за всеки вариант, който се сетиш, си пиши примерна програмка, компилирай и изпълнявай през дебъгер. Много помага.

Успех!

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.