Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
#1

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

27.01.2014, 06:58. Просмотров 462. Ответов 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 или я вконец запутался?
http://www.cyberforum.ru/cpp-beginners/thread1127165.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 06:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу разобраться с оператором стрелка "->" (C++):

Нужно разобраться с оператором "FOR"
Снизу указана программа, скажите пожалуйста, как мне сделать увеличение...

Ничего сложного, но разобраться не могу. За "реал" плюсану!
Доброе время суток, уважаемые! Есть функция, Transform(). Надо сделать так,...

Не могу разобраться в термине "Битовые операторы"
Есть к примеру такой код, интересует строка fd.dwFileAttributes &...

не могу разобраться функцией систем("")
system("Findstr word dbaze.txt");- так он находит слово... а мне нужно что бы...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить...

6
alsav22
5438 / 4833 / 831
Регистрация: 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.
0
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.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 08:44 #4
Лучший ответ Сообщение было отмечено Gad как решение

Решение

Цитата Сообщение от Gad Посмотреть сообщение
структура v2 указывает на структуру v1
v2 и v1 - это не структуры, а адреса структур (они же - указатели на структуры).

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

Добавлено через 10 минут
p->v2->v1=p->v1.
p->v2 - получаем адрес следующей структуры (тот, что содержится в текущей структуре в указателе v2)
v2->v1 - через этот адрес, получаем, в следующей структуре, указатель на предыдущую (т.е., пока на текущую)
= p->v1 - этому указателю присваиваем адрес предыдущей структуры (тот, что содержится в текущей структуре в указателе v1).
1
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);
а затем освобождаем память выделенную под эту структуру и завершаем цикл по удалению. Так?
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 09:46 #6
Цитата Сообщение от Gad Посмотреть сообщение
получается в предыдущей и последующей структурах мы стираем указатели на текущую
Правильнее сказать не стираем, а переписываем друг на друга, минуя текущую.
Цитата Сообщение от Gad Посмотреть сообщение
а затем освобождаем память выделенную под эту структуру и завершаем цикл по удалению. Так?
Да.
0
Gad
12 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 31
27.01.2014, 09:50  [ТС] #7
Теперь все предельно ясно, даже странно как я сам этого не понял))) Спасибо большое!
0
27.01.2014, 09:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 09:50
Привет! Вот еще темы с решениями:

Не могу разобраться с оператором while
Столкнулся со странной проблемой. В простой программе цикл с условие while...

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

Вектор указателей и оператор "стрелка"
Не получается реализовать отбражение содержимого контейнера, при помощи...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru