Inicialización de punteros extraños

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

preguntado el 03 de mayo de 12 a las 07:05

¿También se declaró en la misma línea? -

@dpp que lo convertiría en un puntero simple en lugar de dos niveles de direccionamiento indirecto. Tiene más sentido para los principiantes. -

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:

@KudayarPirimbaev Creo que es hora de agregar esa información a su pregunta :) -

Sí, soy un novato silencioso en esta comunidad: DDDD -

4 Respuestas

// 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

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

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

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 or haz tu propia pregunta.