2012-06-24 24 views
7

Soy un novato absoluto en C, así que esta puede ser una pregunta tonta, ¡advertencia!¿Cómo puedo obtener la dirección de una estructura en C?

Está inspirado en la sección de crédito adicional de Exercise 16 en Learn C the Hard Way, si alguien se está preguntando sobre el contexto.

Suponiendo que estas importaciones:

#include <stdio.h> 
#include <assert.h> 
#include <stdlib.h> 

y dada una estructura simple como esto:

struct Point { 
    int x; 
    int y; 
}; 

Si creo una instancia del mismo en el montón:

struct Point *center = malloc(sizeof(Point)); 
assert(center != NULL); 
center->x = 0; 
center->y = 0; 

Entonces Sé que puedo imprimir la ubicación de la estructura en la memoria de esta manera:

printf("Location: %p\n", (void*)center); 

¿Pero y si lo creo en la pila?

struct Point offCenter = { 1, 1 }; 

Los valores que se encuentran en la pila todavía tienen una ubicación en la memoria en alguna parte. Entonces, ¿cómo puedo obtener esa información? ¿Debo crear un puntero a mi nueva estructura on-the-stack y luego usar eso?

EDIT: Vaya, supongo que fue un poco obvio. ¡Gracias a Daniel y Clifford! Para completar aquí está el ejemplo de impresión mediante &:

printf("Location: %p\n", (void*)&center); 
+8

Utilice el operador de dirección, '& offCenter'. –

+1

@DanielFischer: Por favor, publícalo como respuesta :) Quiero decir, realmente, ¿cómo se supone que Nick debe elegir un comentario como mejor respuesta? –

+0

Sí, me siento un poco tonto ahora :) Gracias Daniel. ¿Quieres publicar eso como una respuesta y conseguir que sea aceptado? –

Respuesta

11

Con la "dirección de" operador unitario &.

struct Point offCenter = { 1, 1 }; 
struct Point* offCentreAddress = &offCentre ; 
Cuestiones relacionadas