Wpis z mikrobloga

Ciąg dalszy nauki wskaźników, Otóż przypisałem wskaźnikom zmienne czy jak to tam się nazywa,
Ale do rzeczy, jak już odpaliłem ten program, to on mi zwrócił takie coś
0xb757ee55,(nil),0xbeee3a50, O ile się orintuję to 1 i 3 to są adresy zmiennych w pamięci zapisane w systemie szesnastowym, Ale co to jest te (nil)? A drugie pytanie co w ogóle robi "%p"?

int main()
{
int *c,ch;
float *x,xh;
double *m,mh;

m=&mh
x=&xh
c=&ch

printf("%p,%p,%p",*c,*x,*m);

return 0;
}
#naukaprogramowania #jezykc #wskazniki #programowanie
  • 8
  • Odpowiedz
@Hertesus: Nie pomyl się przy definiowaniu zmiennych, bo czuję że ten zapis mógł Cię zmylić.
int *c,ch; - ta linia nie deklaruje wskaźnika c i integera ch, tylko dwa wskaźniki. Gwiazdka jakby "należy" do typu zmiennej a nie jej nazwy. Dlatego ja preferuję zapisywać to tak, wtedy jest wszystko jasne.
int* c, ch;

W tym programie deklarujesz więc 6 pustych wskaźników na int. I teraz tak:
* to operator wyłuskania, więc
  • Odpowiedz
@Calosija: Niestety, tutaj się mylisz. int* c, ch; zadeklaruje wskaźnik o identyfikatorze c na zmienną typu int, oraz zmienną typu int o identyfikatorze ch.

@Hertesus: T co zamieścił @Calosija jest ok. Pamiętaj, że jak chcesz wypisać adres na który wskazuje wskaźnik to używasz samego identyfikatora, bez gwiazdki. Wskaźnik to zmienna, której wartością jest adres innej zmiennej.
  • Odpowiedz
@Hertesus: to zależy co chcesz osiągnąć.
Jeśli chodzi o funkcję printf oraz %p, no to wypisuje to wartość zmiennej w postaci przeznaczonej dla adresów zmiennych.
Jeśli sobie zadeklarowałeś 3 zmienne: ch, xh, mh i następnie przypisałeś ich adresy (za pomocą operatora uzyskania adresu &) do wskaźników c, x, m i:
- chcesz wyświetlić ich wartości mając do dyspozycji tylko wskaźniki:
to źle wpisujesz do funkcji printf, ponieważ zamiast %p powinno być
  • Odpowiedz