Форум программистов, компьютерный форум CyberForum.ru

Не могу разобраться с оператором стрелка "->" - C++

Восстановить пароль Регистрация
 
Gad
 Аватар для Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
27.01.2014, 06:58     Не могу разобраться с оператором стрелка "->" #1
Вот пример функции удаляющей фамилию из списка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 void del(void)
{spis *p,*temp;char f[20]; // f[20] – Строка для удаляемой фамилии
  clrscr();
  printf("Фамилия: ");gets(f);
  p=head;
  while (p!=NULL)
    {if (strcmp((p->data),f)==0) // если найдена заданная фамилия
    {if (p==head) // если найденная запись - первая
        {head=p->v2;
          head->v1=NULL;
          free(p);
          p=head;
        }
       else if (p==tail) // если найденная запись - последняя
      {tail=p->v1;
        tail->v2=NULL;
        free(p);
        p=tail;
      }
      else // удаление из средины списка
      {p->v2->v1=p->v1;
        p->v1->v2=p->v2;
        temp=p;
        p=p->v2;
        free(temp);
      }
    }
else // если заданная фамилия не найдена – продвигаемся по списку
p=p->v2;
}
}
v1/v2 -указатели на предыдущую/последующую структуру, элементы стуктуры spis
Если верить моему учебнику, то "Оператор -> используется при наличии указателя на структуру или объединение". Другими словами получается p->v2->v1=p->v1; это грубо говоря spis.v2==spis.v1=spis.v1 или я вконец запутался?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 07:44     Не могу разобраться с оператором стрелка "->" #2
Стрелка применяется, когда нужно получить доступ к чему-либо через адрес (указатель).
p->v2->v1=p->v1. После выполнения этого действия, структура, которая стоит за той, на которую указывает p, будет указываеть на ту, что стоит перед той, на которую указывает p.
p->v1->v2=p->v2. После выполнения этого действия, структура, которая стоит перед той, на которую указывает p, будет указываеть на ту, что стоит за той, на которую указывает p.
Gad
 Аватар для Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
27.01.2014, 08:27  [ТС]     Не могу разобраться с оператором стрелка "->" #3
Ага, запутался))
т.е. p->v2->v1=p->v1 структура v2 указывает на структуру v1, а p->v1->v2=p->v2 структура v1 указывает на структуру v2.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 08:44     Не могу разобраться с оператором стрелка "->" #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gad Посмотреть сообщение
структура v2 указывает на структуру v1
v2 и v1 - это не структуры, а адреса структур (они же - указатели на структуры).

Добавлено через 2 минуты
Путаница из-за того, что v1 и v2 - это, одновременно, и поля структур (указатели) и адреса структур.

Добавлено через 10 минут
p->v2->v1=p->v1.
p->v2 - получаем адрес следующей структуры (тот, что содержится в текущей структуре в указателе v2)
v2->v1 - через этот адрес, получаем, в следующей структуре, указатель на предыдущую (т.е., пока на текущую)
= p->v1 - этому указателю присваиваем адрес предыдущей структуры (тот, что содержится в текущей структуре в указателе v1).
Gad
 Аватар для Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
27.01.2014, 09:39  [ТС]     Не могу разобраться с оператором стрелка "->" #5
Это было, что-то))
p->v2->v1=p->v1
p->v1->v2=p->v2
получается в предыдущей и последующей структурах мы стираем указатели на текущую
temp=p;
p=p->v2;
free(temp);
а затем освобождаем память выделенную под эту структуру и завершаем цикл по удалению. Так?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 09:46     Не могу разобраться с оператором стрелка "->" #6
Цитата Сообщение от Gad Посмотреть сообщение
получается в предыдущей и последующей структурах мы стираем указатели на текущую
Правильнее сказать не стираем, а переписываем друг на друга, минуя текущую.
Цитата Сообщение от Gad Посмотреть сообщение
а затем освобождаем память выделенную под эту структуру и завершаем цикл по удалению. Так?
Да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 09:50     Не могу разобраться с оператором стрелка "->"
Еще ссылки по теме:

На экране изобразить стрелу и шар. Организовать управление стрелой, для попадания в шар знаками "стрелка влево", "стрелка вправо" C++
C++ Не могу разобраться в термине "Битовые операторы"
C++ Компилятор визуаль студио 2008 с++,выскакивает ошибка с оператором вывода "<< "

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gad
 Аватар для Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
27.01.2014, 09:50  [ТС]     Не могу разобраться с оператором стрелка "->" #7
Теперь все предельно ясно, даже странно как я сам этого не понял))) Спасибо большое!
Yandex
Объявления
27.01.2014, 09:50     Не могу разобраться с оператором стрелка "->"
Ответ Создать тему
Опции темы

Текущее время: 23:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru