【发布时间】:2023-03-25 13:01:01
【问题描述】:
所以我声明了一个指向结构的指针并将其设置为NULL,
struct nodo * root = NULL;
然后在我创建的函数中,我将一些给定的值添加到所述指针。
void add(struct nodo * root, int id, int age){
if (root== NULL){
root= (struct nodo *)malloc(sizeof(struct nodo));
root->id = id;
root->age= age;
root->prox = NULL;
}
当我使用 printf 检查我在函数中赋予指针的值时,我看到事实上,它们在根指向的结构中,但是在我调用函数之后,如果我检查值是否还在那里它什么都没有返回。例如(主要):
add(raiz_idoso, id, age);
printf("%d\n", root_idoso->id);
printf("%d\n", root)idoso->age); // this returns nothing! but if i did the same thing inside the function add, it would return the values of id and age
谁能帮我理解我做错了什么?
如果有帮助的话,这里是完整的代码,为了更容易理解,我已经翻译了上一部分的一些东西,它是葡萄牙语:
#include <stdio.h>
#include <stdlib.h>
struct nodo {
int id;
int idade;
struct nodo * prox;
};
void adicionar (struct nodo * raiz, int id, int idade){
if (raiz == NULL){
printf("oi");
raiz = (struct nodo *)malloc(sizeof(struct nodo));
raiz->id = id;
raiz->idade = idade;
raiz->prox = NULL;
}
else if (raiz -> prox == NULL){
struct nodo * temp;
raiz->prox = (struct nodo *)malloc(sizeof(struct nodo));
temp = raiz->prox;
temp->id = id;
temp->idade = idade;
temp->prox = NULL;
}
else{
adicionar(raiz->prox, id, idade);
}
}
void remover (struct nodo * raiz){
if (raiz != NULL){
raiz = raiz->prox;
}
}
void imprimir (struct nodo * raiz, int primero){
if (raiz == NULL && primero == 1){
printf("fila vazia!\n");
}
else if (raiz != NULL){
printf("ID: %d IDADE: %d\n", raiz->id, raiz->idade);
imprimir(raiz->prox, 0);
}
}
int main (void){
char entrada;
int id, idade, prioridade, counter;
struct nodo * raiz_idoso = NULL;
struct nodo * raiz_nidoso = NULL;
scanf("%d", &prioridade);
counter = 0;
while(entrada != 'f'){
scanf(" %c", &entrada);
if (entrada == 'a'){
scanf(" %d", &id);
scanf(" %d", &idade);
if (idade > 60){
adicionar(raiz_idoso, id, idade);
printf("%d\n", raiz_idoso->id);
printf("%d\n", raiz_idoso->idade);
}
else if (idade < 60){
adicionar(raiz_nidoso, id, idade);
}
}
else if (entrada == 'r'){
if (raiz_idoso == NULL && raiz_nidoso == NULL){
}
else if (raiz_idoso == NULL){
counter = 0;
remover(raiz_nidoso);
}
else if (raiz_nidoso == NULL){
counter = 0;
remover(raiz_idoso);
}
else{
if (counter > prioridade){
counter = 0;
remover(raiz_nidoso);
}
else{
counter += 1;
remover(raiz_idoso);
}
}
}
else if (entrada == 'i'){
printf("fila de idosos:\n");
imprimir(raiz_idoso, 1);
printf("fila de nao-idosos:\n");
imprimir(raiz_nidoso, 1);
printf("----------\n");
}
}
}
【问题讨论】: