Tengo una función que devuelve la dirección de la siguiente

struct node *create_node(int data)
{
        struct node *temp;
        temp = (struct node *)malloc(sizeof(struct node));
        temp->data=data;
        temp->next=NULL;
        printf("create node temp->data=%d\n",temp->data);
        return temp;
}

donde struct nodo es

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

¿Cómo puedo ver en printf(“”) la dirección almacenada en temp?

ACTUALIZACIÓN
Si el enfocaba en gdb las direcciones que vienen en número hexadecimal formato decir
0x602010 donde la misma dirección en printf("%p",temp) viene en un número diferente que es diferente de lo que yo vi en gdb comando de impresión.

OriginalEl autor Registered User | 2011-06-20

2 Comentarios

  1. 26

    Utilizar el puntero de direcciones especificador de formato %p:

    printf("Address: %p\n", (void *)temp);
    +1: Por el exceso de celo (pedanticly correcta) compiladores, emitidos el puntero a void*: printf("%p", (void*)temp)
    ¿Por qué no acaba de imprimir la dirección de la cosa, como printf("0x%08X", &temp);?
    no hay garantía de unsigned y struct node** tienen la misma representación: el fragmento falla terriblemente en máquinas de 64-bits, por ejemplo
    Yo creo que tu primer comentario re casting para void * sólo se aplica a la de C++ ? En C puede pasar cualquier tipo de puntero a una función que espera un void *, ¿no ?
    printf es una función de la aceptación de un número variable de argumentos. No hay “prototipo” para los parámetros después de la primera. El compilador no puede hacer valer el valor a ser del tipo correcto y que el programador debe hacerlo manualmente. yo no sé acerca de C++.

    OriginalEl autor jv42

  2. 2

    EDICIÓN:
    No hagas esto! Se imprime la dirección del puntero, no lo que usted quiere!

    Tuve todo tipo de problemas para conseguir que esto funcione, pero hay algo que el compilador (yo uso el de simple “cc” línea de comandos de unix) no se quejan y parecía dar resultados:

    struct node temp;
    //... whatever ...
    printf ("the address is %p", &temp);

    [En lugar de eliminar, he dejado esto como un ejemplo de qué NO hacer. -smb]

    Este es incorrecta (ver la otra respuesta para la discusión), también, claramente la pregunta pide ver temp y no &temp
    sí, más pruebas muestran que usted está en lo correcto. Esta respuesta imprime la dirección del puntero, no el valor.

    OriginalEl autor Scott Biggs

Dejar respuesta

Please enter your comment!
Please enter your name here