2012-06-24 20 views
7

Jestem absolutnym początkującym dla C, więc to może być głupie pytanie, ostrzeżenie!Jak mogę uzyskać adres struktury w C?

Inspiracją jest sekcja o dodatkowym kredycie: Exercise 16 w Nauce C na twardej drodze, jeśli ktoś zastanawia się nad kontekstem.

Zakładając przywóz:

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

i otrzymać proste struct tak:

struct Point { 
    int x; 
    int y; 
}; 

Jeśli utworzyć instancję niej na stercie:

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

Potem wiem, że mogę wydrukować lokalizację struktury w pamięci w ten sposób:

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

Ale co, jeśli utworzę go na stosie?

struct Point offCenter = { 1, 1 }; 

wartości siedzi w stosie nadal mają miejsce w pamięci gdzieś. Jak mogę uzyskać te informacje? Czy muszę utworzyć wskaźnik do mojej nowej na stosie-struktury, a następnie użyć?

EDYCJA: Ups, zgadnij, że to było trochę oczywiste. Podziękowania dla Daniela i Clifforda! Dla kompletności oto przykład drukowanie za pomocą &:

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

Użyj operatora adresu '& offCenter'. –

+1

@ Daniel Fischer: Proszę zaksięguj to jako odpowiedź :) Mam na myśli, naprawdę, jak Nick powinien wybrać komentarz jako najlepszą odpowiedź? –

+0

Tak, czuję się teraz trochę głupi :) Dzięki Daniel. Czy chcesz opublikować to jako odpowiedź i uzyskać akceptację? –

Odpowiedz

11

Z „adres-of” operatora jednoargumentowego &.

struct Point offCenter = { 1, 1 }; 
struct Point* offCentreAddress = &offCentre ; 
Powiązane problemy