es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declaración local vs global En la programación informática, una declaración local se refiere a una variable que está restringida al ámbito de una función en particular. Esto significa que la variable solo puede ser usada dentro de la función en la que se declaró y no puede ser accedida desde otros lugares del programa. Por otro lado, una declaración global se refiere a una variable que es accesible desde cualquier parte del programa. Esto significa que la variable puede ser usada en cualquier función o parte del programa. Es importante tener en cuenta que el uso de declaraciones globales puede llevar a problemas de mantenibilidad y escalabilidad en el código, por lo que su uso debe ser cuidadoso y restringido a casos específicos en los que sea absolutamente necesario.

#include<stdio.h>
#include<stdlib.h>

struct node
{
int data;
struct node* link;
};

void insert_last(struct node **head, int value)
{
struct node* new = malloc(sizeof(struct node));
new->data = value;

if( !*head )
{
    new->link = NULL;
    *head = new;
}
else
{
    struct node* last = *head;
    while(last->link)
    {
        last = last->link;
    }
    new->link = NULL;
    last->link = new;
}

}

struct node *head;

int main()
{
insert_last( & head, 5);
insert_last( & head, 10);
insert_last( & head, 15);
printf(“%d “, head->data);
printf(“%d “, head->link->data);
printf(“%d “, head->link->link->data);

}

Si declaro struct node *head dentro de main, el programa no funciona ¿Cuál es la razón?

Si lo declaro globalmente, funciona, de lo contrario no funciona.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual declarar struct node *head dentro de la función main hace que el programa no funcione es porque la función insert_last toma un puntero a un puntero al nodo de inicio. Cuando struct node *head se declara dentro de la función main, se convierte en una variable local y no se puede acceder desde fuera del alcance de la función main. Por lo tanto, cuando la función insert_last intenta actualizar el nodo de inicio, no puede hacerlo ya que no tiene acceso al puntero de salida.

    En contraste, cuando head se declara globalmente, se convierte en una variable global y se puede acceder desde cualquier lugar dentro del programa. Por lo tanto, la función insert_last puede actualizar el nodo de inicio incluso si se declara fuera de la función main.

    En resumen, la razón por la cual la declaración de struct node *head globalmente funciona mientras que la declaración local no funciona se debe a las diferencias en el alcance y la accesibilidad de las variables.

Comments are closed.