Inicialización de punteros extraños
Frecuentes
Visto 83 veces
1
Hoy tuve un examen de ponters en C, y hubo algunas preguntas sobre punteros dobles donde se usaba la siguiente sintaxis
*pointer = &variable;
No sé si lo hice correctamente, pero ¿alguien puede explicar dónde apuntará el puntero y cómo cambiará el valor en la variable? Al principio pensé que causaría un error de sntax, pero no hubo tal respuesta en una prueba. Gracias por adelantado
4 Respuestas
1
// two int variables.
int var1;
int var2;
// int pointer pointing to var1
int *ptr = &var1;
// pointer to int pointer..pointing to ptr
int **ptr_to_ptr = &ptr;
// now lets make the pointer pointed to by ptr_to_ptr
// point to var2
*ptr_to_ptr = &var2;
// or alternatively you can do:
// ptr = &var2;
contestado el 03 de mayo de 12 a las 07:05
0
Aquí hay un ejemplo de cómo podría usarlo:
int foo = 123;
int **bar = malloc(sizeof(int *));
*bar = &foo;
Actuales bar
es un puntero a un puntero a foo. Aunque no tiene mucho sentido.
contestado el 03 de mayo de 12 a las 07:05
Parece que se debe agregar una declaración a la pregunta :) - dpp
Su ejemplo particular no tiene mucho sentido, pero hay razones perfectamente sensatas para hacerlo. *pointer = &variable
en general. - jamesdlin
Sí, todas ellas eran preguntas sobre puntos dobles. Ahora tiene algo de sentido para mí - Kudayar Pirimbaev
0
pointer
es un puntero a un puntero. P.ej,
int var1=42;
int* intptr;
int** ptr2intPtr;
ptr2intptr = &intptr;
//Syntax in question.
*ptr2intptr = &var1;
//Just like *intptr is same as var1, *ptr2intptr is same as intptr
//so the above line will be equivalent to intptr = &var1
//All the three are the same
printf("%d",**ptr2intptr);
printf("%d",*intptr);
printf("%d",var1);
contestado el 03 de mayo de 12 a las 07:05
0
Si el puntero se inicializa de esta manera:
int *pointer;
int variable = 10;
pointer = malloc(sizeof(int));
*pointer = &variable;
*pointer = &variable
significa que la dirección de la variable se establece como valor del pointee. Ya que *pointer
está desreferenciando, por lo que básicamente está almacenando un valor sin establecer una referencia.
contestado el 03 de mayo de 12 a las 07:05
Entonces, si, por ejemplo, la dirección de la variable es algo así como (0x100), entonces este valor se almacenará y el puntero lo señalará. ¿He entendido bien? - Kudayar Pirimbaev
Eso es si el puntero se inicializa correctamente antes de la asignación. - dpp
Sí, me equivoqué, asumo que el puntero no es un puntero a un puntero. - dpp
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c pointers or haz tu propia pregunta.
¿También se declaró en la misma línea? - Mahmoud Al-Qudsi
@dpp que lo convertiría en un puntero simple en lugar de dos niveles de direccionamiento indirecto. Tiene más sentido para los principiantes. - Mahmoud Al-Qudsi
No, no en la misma línea. Se usó al menos tres veces para doble puntero. Ahora entendí lo que significaba de las respuestas a continuación, y mi teoría en la prueba era correcta: Kudayar Pirimbaev
@KudayarPirimbaev Creo que es hora de agregar esa información a su pregunta :) - dpp
Sí, soy un novato silencioso en esta comunidad: DDDD - Kudayar Pirimbaev