В чем разница между узлом a и узлом *? - PullRequest
0 голосов
/ 06 августа 2020
struct Node
{
    int w;
    Node* w1;
};
int main(){
    Node a;
    Node *s;
}

В чем разница между a и * s в приведенном выше коде. Чем они отличаются и почему мы используем Node * s при создании LinkList. СПАСИБО !!!

1 Ответ

1 голос
/ 06 августа 2020

Узел a - это объект. Он выделяет место в памяти. Node * s1 - указатель на объект типа Node, но сам объект должен быть создан, например, с помощью оператора new. Или мы должны явно взять и адрес объекта с помощью оператора &. Это просто переменная, содержащая адрес. Размер этой переменной зависит от платформы (4 байта на x86, 8 байтов на x86_64).

Каждый узел связанного списка хранит указатель на следующий узел. Вот почему нам здесь нужен указатель. Таким образом, если у вас есть доступ к узлу, вы можете перейти к следующему и концу списка.

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

// Node type definition
struct Node
{
   int w;
   Node* w1;
};

int main() {
    // Separate nodes
    Node n1;
    Node n2;
    Node n3;
    
    // Now this is a linked list
    n1.w1 = &n2;
    n2.w1 = &n3;
    n3.w1 = nullptr; // to mark the end
    
    // Get pointer to n2 from n1
    Node *n2_ptr = n1.w1;
    Node *n3_ptr = n2.w1;
    // Check if n3 is the last element
    if (n3_ptr->w1 == nullptr) {
        // this is the end of the list
    }
    
    // walk the list
    Node *node = &n1;
    while (node != nullptr) {
        node->w *= 2; // do smth with data
        node = node->w1; // go to the next node
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...