Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

215
Visualizações
Punteros a estructuras en C vs punteros a matrices

¿Los punteros a estructuras en C funcionan de manera diferente a otros punteros? Por ejemplo en este código:

 typedef struct node { int data; struct node *next; } node; void insert(node **head, int data) { node *new_node = malloc(sizeof(node)); new_node->data = data; new_node->next = *head; *head = new_node; } int main() { node *head = NULL; insert(&head, 6);

¿Por qué tengo que usar un puntero a un puntero y no puedo usar el head variable en la función de insert como en este ejemplo con matrices?

 void moidify(int *arr) { *arr = 3; } int main() { int *array = malloc(8); *array = 1; *(array + 1) = 2; moidify(array); }

Aquí no tengo que pasar &array a la función.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No hay diferencia. Si desea cambiar el valor de la variable que envía para que function de tal manera que el cambio sea visible en la función que llamó a la function , debe proporcionar su dirección a la function , que es lo que hace cuando toma la dirección de head

En moidify(array) envía un puntero al primer elemento de la array , por lo que funciona la modificación de los datos de la matriz. Si desea modificar la variable de array en sí (haciéndola apuntar potencialmente a otro lugar), también deberá tomar su dirección. Ejemplo:

 void moidify(int **arr) { *arr = realloc(*arr, 128); if(*arr == NULL) { perror(__func__); exit(1); } } int main() { int *array = malloc(8); *array = 1; *(array + 1) = 2; moidify(&array); }
over 4 years ago · Santiago Trujillo Relatório

0

Debe comprender cómo funcionan los punteros para obtener este. Aquí, la array de variables no es propiamente una matriz. Es un puntero hacia un espacio de memoria, de tamaño 8 * sizeof(int) . Contiene sólo una dirección. Desde esta dirección puede acceder a los valores de la matriz, se mueve usando esta dirección, al espacio de memoria que desea llenar o leer.

Una vez que comprenda eso, cuando llama a la función moidify , no está pasando la matriz. Ni el espacio de la memoria. Estás pasando, la dirección del espacio de memoria. La función obtiene una copia de la dirección dada, en la variable de argumento int *arr .

Por lo tanto, puede usarlo de la misma manera que lo usa desde la función main .

Si quisiera cambiar la dirección hacia la que iría la variable de array , necesitaría especificar &array en la función receptora, que luego usaría una variable de argumento int ** .

Su ejemplo con struct es similar a esta última parte que acabo de describir, desea cambiar hacia qué dirección apunta el head , por lo que debe dar &head a la función. Para obtener la dirección del head y poder modificar la dirección contenida.

Utiliza una dirección, para acceder al espacio de memoria llamado head , para modificar la dirección dentro del espacio de memoria llamado head , que apunta hacia otro espacio de memoria, donde realmente pertenece su estructura.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda