Разные назначения в указателях

#c #pointers #struct

#c #указатели #структура

Вопрос:

Как вы можете видеть в коде, я присваиваю указателю разные значения:

  1. fin-&&t;si&uiente = nuevo_nodo;
  2. fin = nuevo_nodo;

Имеет ли это какое-либо значение?

 void append(Nodo *amp;frente, Nodo *amp;fin, int valor){
    Nodo *nuevo_nodo = new Nodo();
    nuevo_nodo-&&t;valor = valor;
    nuevo_nodo-&&t;si&uiente = nullptr;
    if(empty(frente)){
        frente = nuevo_nodo;
    }
    else{
        fin-&&t;si&uiente = nuevo_nodo;
    }
    fin = nuevo_nodo;
}
  

Комментарии:

1. Ваш вопрос, похоже, является проблемой XY . Смотрите: В чем проблема XY? . Похоже, вы не знаете, как сформировать связанный список из ваших узлов. Чего именно вы пытаетесь достичь?

2. Я вижу разницу 0x56021db72e -&&t;f<- 0 и 0x56021db72e -&&t;d<- 0

3. Вывод, который вы показываете, содержит 4 строки и 3 разных адреса. Вторая и четвертая строки одинаковы — но это неудивительно, поскольку они печатают ptr и ptr3 , а самая последняя строка перед выводом — ptr = ptr3; Итак, что вы подразумеваете под «без разницы» — что вы ожидали отличить от чего-либо еще?

4. Я обновил вопрос

5. Разумеется, эти два назначения изменяют два разных объекта. Один изменяет fin-&&t;si&uiente , другой изменяет fin .

Ответ №1:

Поскольку вы изменили вопрос, я тоже изменю ответ.

Когда выполняется ваша часть else, вы назначаете ‘fin-&&t;si&uiente = nuevo_nodo’. Скажем, ‘fin’ изначально был по адресу 1000, а ‘nuevo_nodo’ — по адресу 2000. исходный указатель fin указывает на адрес 2000.

В следующей строке вы присваиваете ‘fin = nuevo_nodo’, так что теперь fin указывает на адрес 2000, а указатель ‘si&uiente’ не назначен (строка 4).