stworzyłem prosty program:Zmienna deklaracja i ich adresy pamięci w C
#include <stdio.h>
int main()
{
int s1;
int s2;
int s3;
int *p1, *p2, *p3;
p1 = &s1;
p2 = &s2;
p3 = &s3;
printf("%d\n%d\n%d", p1, p2, p3);
}
Ilekroć uruchomić ten program, drukuje adresy pamięci wskaźników p1
, p2
i p3
i ciekawe jest to, że te wartości różnią się od siebie o 12
. Chcę poznać przyczynę tego. Dlaczego adresy różnią się o 12
?
Uwaga: Tak się dzieje za każdym razem Wykonuję program.
wyjściowa:
Przetestowałem ten sam program w wielu typów zmiennych, wyniki i dostaje to ..
Kiedy zmienne są typu char.
gdy zmienne typu long
Kiedy zadeklarować int tablicę, rozmiar każdej tablicy jest 1.
gdy wielkość drugiego deklarowanej tablicy wynosi 2, otrzymuje dodatkowe 4 bajty przesunięcia.
Dlaczego nie użyć specyfikatora formatu przeznaczonego do drukowania wskaźników, a jeszcze lepiej "std :: cout"? A dlaczego nie użyć ważnego podpisu dla 'main'? – chris
Spojrzenie na wygenerowany kod (w debuggerze lub deasemblatorze) prawdopodobnie pomoże ci oświecić cię. – cHao
Jaki jest kompilator i platforma? – Steve