Wpis z mikrobloga

Następny etap nauki wskaźników, zaraz po tablicach wskaźników, jest odwołanie wskaźników? Chodzi o to żeby wskaźnik wskazywał wskaźnik. Wytłumaczy mi ktoś jakim cudem to działa,

int main()
{
char tab[10],**wdw,*w; // działający przykład
w=&tab
wdw=&w

gets(*wdw);
printf(tab);
return 0;
}
A jak bym chciał użyć za pomocą jednego wskaźnika to już nie działa?

int main()
{
char tab[10] , *w; // Ten niedziałający
w=&tab

gets(*w);
printf(tab);
return 0;
}
#naukaprogramowania #jezykc #wskazniki
  • 6
  • Odpowiedz
@Hertesus: możesz zrobić gets(tab); nie do końca rozumiem problem. Może poćwicz wskaźniki np. na intach, bez tablic? Tablice w C są... dziwne, bo są bardzo blisko wskaźników, ale łatwo się poplątać.

BTW: char* w = &tab wygląda kiepsko -- tu chyba jest niezgodność typów. Być może zależy od standardu C - dawno nie pisałem w tym języku. Wg. mnie w = tab, lub w = &tab[0] wyglądają lepiej. Co nie znaczy,
  • Odpowiedz
@Hertesus: Na marginesie, masz w tym programie przynajmniej 2 krytyczne błędy:

- używasz gets() - gwarantowany buffer overflow
- używasz niezaufanych danych jako pierwszy parametr printf() - format string attack

Na tym etapie nauki nie musi to być najważniejsze, z drugiej strony warto bronić się przed złymi nawykami, w C to szczególnie ważne.
  • Odpowiedz
@co_to_sie_stanelo: Dzięki za rady. Muszę jeszcze sporo poćwiczyć na wskaźnikach. A propos tego drugiego przykładu z ciekawości usunąłem gwiazdkę z tego fragmentu gets(*w); i program o dziwo zaczął działać.
Wiesz może dlaczego w 1 przykładzie trzeba gwiadki gets(*wdw); a w 2 już nie?
  • Odpowiedz