Зачем он используется “->” в C и C ++ после того, как манипулирует структурами данных?

Зачем он используется -> в C?

Пример: new -> dato = dato;.

Код:

void insertar(int dato) {
    node *nuevo = (node *)malloc(sizeof(node));
    nuevo -> dato = dato;
    nuevo -> siguiente = primero;
    primero = nuevo;
}
6
задан 26.01.2017, 09:20
0 ответов

Поскольку мы знаем, в C / C ++ обычно работать с указателями.

В следующем коде

struct Nodo {
  int A;
  int B;
};

struct Nodo *nd = (struct Nodo *)malloc( sizeof( struct Nodo ) );

Поскольку мы соглашаемся на признак A через указатель nd ?

Одна из альтернатив:

(*nd).A = 10;

Без embaro, C / C ++ они предоставляют нам более простой способ писать, и, лично, я нахожу, что проще понимания, посредством оператора ->:

nd->A = 10;

Оба метода эквивалентные и взаимозаменяемые. PUNTERO->ATRIBUTO это краткий способ делать (*PUNTERO).ATRIBUTO.

-> он - оператор, и, следовательно, возможно усиливаться:

struct Nodo {
  struct Nodo *n;
  int A;
  int B;
};

ptr->n->A = 10;
11
ответ дан 03.12.2019, 17:30
  • 1
    Тогда, -> - эквивалент ., когда об указателях он относится друг к другу? (sorry из-за вопроса). –  09.02.2018, 02:47
  • 2
    @Xam точный; -> используется, когда переменная Вашей левой стороны - указатель. –  09.02.2018, 06:38

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

Оператор для доступа к членам объекта - точка (.), итак: имея инстанцию любого объекта, соглашаются на любого члена того же самого используя точку:

struct Objeto {
    int Miembro;
};

Objeto a, b;
a.Miembro; // <- accede al miembro 'Miembro' de la instancia 'a'.
b.Miembro; // <- accede al miembro 'Miembro' de la instancia 'b'.

Если вместо инстанции мы имеем указатель по отношению к объекту, мы не можем использовать действующую точку, так как указатель не объект. Это было бы как пробование запускать машину используя ключ на реестре: реестр не машина, хотя он будет стоить нам для того, чтобы идентифицировать машину в частности.

Но если ты дал, мы снабжаем ссылками указатель с оператором unario des-ссылки (*) мы получим инстанцию объекта и сможем использовать действующую точку:

struct Objeto {
    int Miembro;
};

Objeto a;
Objeto *b = &a; // el puntero b apunta a la instancia a.
a.Miembro;    // <- accede al miembro 'Miembro' de la instancia 'a'.
(*b).Miembro; // <- des-referencia b y accede al miembro 'Miembro' de la instancia apuntada.

Но синтаксис (*puntero).miembro она некомфортабельная чтения и писания, так что было решено использовать синтаксис, сразит стрелой (->) так что puntero->miembro он был эквивалентным в (*puntero).miembro. Оба выбора - usables так в C как в C ++, но он советует себе, чтобы использовать оператор сразил стрелой (->) из-за того, что является яснее.

Как любопытство, я хотел бы упомянуть, что оператор сразит стрелой (->) он sobrecargable в C ++ в то время как действующая точка (.) не это es1.

Другой синтаксический сахар операторов, известных так в C как в C ++ они были бы:

  • Оператор увеличения (++): variable++ он равнялся бы в variable = variable + 1;
  • Оператор операции - ассигнования (+=, -=, *=, /=): variable += numero он равнялся бы в variable = variable + numero.
  • Оператор индексации ([]): arreglo[indice] он равнялся бы в *(arreglo + indice)

Существует другой синтаксический сахар, не связанный с операторами, но упоминать обо всех них значило бы удлинять без необходимости ответ.


1Permitir перегрузка действующей точки (.) был выдвинут Бьярне Страустрапом и Габриэлем Душ Реис для стандарта C ++ 17 (технический документ N4173), но предложение было отложено для ниже.

5
ответ дан 03.12.2019, 17:30

->он используется для того, чтобы соглашаться на элементы структуры данных, которая имеется снабженная ссылками указателем или "пойнтером".

node *nuevo = (node *) malloc(sizeof(node));

Создай переменную меткого типа в node i он распределяет ему адрес, который он возвращает malloc() с местом, необходимым для одного node.

nuevo->dato = dato;

Согласись на элемент dato node и он распределяет ему стоимость dato что был перемещен как аргумент функции.

3
ответ дан 03.12.2019, 17:30

В языке C, оператор -> он используется после переменной меткого типа, который указывает на структуру данных, для того, чтобы показывать на какое поле структуры мы хотим согласиться.

В этом случае, изменчивая информация - указатель, который указывает на переменную типа node, у которого есть несколько полей внутри (я восхожу, следующий...) и с

nuevo -> dato

показывается, что мы соглашаемся на Ваше поле, я восхожу.

2
ответ дан 03.12.2019, 17:30

Теги

Похожие вопросы