У меня есть struct, я определил ее как node1, теперь в функции main()
создано 3 указателя на узел node1 node2, которые являются указателями на тип node1 (который является структурным узлом, который я создал).
Inэтот первый фрагмент кода, который я получил, вывел
3
9
2
Это означает, что когда я изменяю node->next
внутри функции, он сам не отражается в основной функции, он работает только внутри функции, хотя я здесьиспользуется вызов по ссылке (следующий фрагмент кода)
Я делаю это неправильно?
Код
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void func(struct Node* node) {
node->data = 9;
node->next = (node->next)->next;
printf("%d\n", (node->next)->data);
}
int main() {
struct Node *node0, *node1, *node2;
node0 = (struct Node *)malloc(sizeof(struct Node));
node1 = (struct Node *)malloc(sizeof(struct Node));
node2 = (struct Node *)malloc(sizeof(struct Node));
node0->data = 1;
node0->next = node1;
node1->data = 2;
node1->next = node2;
node2->data = 3;
node2->next = NULL;
func(node0);
printf("%d\n%d", node0->data, node1->data);
}
Теперь это код, которыйя написал сначала с вызовом по ссылке, это ne также дает тот же вывод
мой желаемый вывод
3
9
3
Так что даже при вызове по ссылке его не работаетКакое решение для этого?
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void func(struct Node **node) {
(*node)->data = 9;
((*node)->next) = (((*node)->next)->next);
printf("%d\n", ((*node)->next)->data);
}
int main() {
struct Node *node0, *node1, *node2;
node0 = (struct Node *)malloc(sizeof(struct Node));
node1 = (struct Node *)malloc(sizeof(struct Node));
node2 = (struct Node *)malloc(sizeof(struct Node));
node0->data = 1;
node0->next = node1;
node1->data = 2;
node1->next = node2;
node2->data = 3;
node2->next = NULL;
func(&node0);
printf("%d\n%d", node0->data, node1->data);
}
Как правильно сделать это?
Я хочу, чтобы решение изменило указатель внутри структуры без возврата и переназначения.
Так вот что я хочу. После вызова функции я хочу, чтобы переменная node1 указывала на точное местоположение как node2.