Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

216
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!