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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
#1

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

27.01.2014, 06:58. Просмотров 400. Ответов 6
Метки нет (Все метки)

Вот пример функции удаляющей фамилию из списка:
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 06:58     Не могу разобраться с оператором стрелка "->"
Посмотрите здесь:

Ничего сложного, но разобраться не могу. За "реал" плюсану! C++
C++ Паттерн "Одиночка" и конструктор копии с оператором присваивания
C++ Вектор указателей и оператор "стрелка"
C++ не могу разобраться функцией систем("")
Ошибка с оператором для "==" C++
Перегрузка оператора "стрелка" C++
C++ Игра "Жизнь"; Нужно, чтобы первое поколение задавалось оператором (с клавиатуры)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 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
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
5415 / 4811 / 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
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
5415 / 4811 / 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++ Компилятор визуаль студио 2008 с++,выскакивает ошибка с оператором вывода "<< "
C++ Непонятки с оператором "delete" У меня изумление. Крашится программа (Qt5.5) Win 8
Не могу разобраться с оператором условия C++
Не могу разобраться с оператором while C++

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

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

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