LINUX.ORG.RU

вопрос по си


0

1

Вот функция для создания двухсвязанного списка. Что делает строка p->prior->next = i в этой вункции? Нигде инфы про двойную стрелку не нашел.

void dls_store(
  struct address *i,   /* новый элемент */
  struct address **start, /* первый элемент в списке */
  struct address **last /* последний элемент в списке */
)
{
  struct address *old, *p;

  if(*last==NULL) { /* первый элемент в списке */
    i->next = NULL;
    i->prior = NULL;
    *last = i;
    *start = i;
    return;
   }

  p = *start; /* начать с начала списка */

  old = NULL;
  while(p) {
    if(strcmp(p->name, i->name)<0){
      old = p;
      p = p->next;
    }
    else {
      if(p->prior) {
        p->prior->next = i;
        i->next = p;
        i->prior = p->prior;
        p->prior = i;
        return;
      }
      i->next = p; /* новый первый элемент */
      i->prior = NULL;
      p->prior = i;
      *start = i;
      return;
    }
  }
  old->next = i; /* вставка в конец */
  i->next = NULL;
  i->prior = old;
  *last = i;
}

Что делает строка p->prior->next = i в этой вункции? Нигде инфы про двойную стрелку не нашел.

Неделя дебилов на ЛОРе.

В Си нет «двойной стрелки». Это доступ по указателю по указателю.

anonymous
()

Двойная стрелка это "->->", а у тебя на лицо незнание Си.

CrossFire ★★★★★
()

А если заставить содержимое головы проинтерпретировать код в более жёваном виде, слева-направо:

(p->prior)->next

ps.
p — указатель на struct address;
p-> — поле структуры по указателю;
p->prior — поле prior из struct address в *p, обоснованно предположу, что «struct addres *prior»;
(p->prior)->next — поле next из struct address по адресу в (p->prior),
если мы элемент списка, то это ж на нас самих указатель суть.

pps. Русский сложнее.

bormant ★★★★★
()

> Нигде инфы про двойную стрелку не нашел.

а в учебнике смотрел?

arsi ★★★★★
()
Ответ на: комментарий от Eddy_Em

Анонимус же в самом первом сообщении разжевал

Не, он коротким сильным и точным ударом послал в нужном направлении в виде краткой и ёмкой фразы

доступ по указателю по указателю

, а разжевал, простите, слонёнок полувлогиненый bormant ;)

bormant ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.