Uczę się C i zastanawiam się jak działa ten kod.

1. Zdaję się że rozumiem jak działa komparator- w przypadku sortowania zwraca informację czy zmienna z danym indeksem ma być przesunięta czy też nie (poprawcie mnie jeżeli się mylę) 

2. Ale mam problem ze zrozumieniem zapisu (int)a - o co w tym chodzi? Dlaczego tutaj jest zadeklarowany wskaźnik dwa razy? I w jaki sposób to działa? 

int cmpfunc (const void * a,
@I_am_not_Even: przy okazji (być może to nie jest dla ciebie rozwiązanie, ale może przyda się w przyszłości):

niemal zawsze zamiast n-wymiarowej tablicy możesz użyć tablicy jednowymiarowej. Przykładowo zamiast deklarować tablicę

int ** wsk = new int[x][y];
możesz

int* wsk = new int[x * y];
Potem trzymasz gdzieś "szerokość" tablicy (rozmiar pierwszego wymiaru - w twoim przypadku x) i zamiast odwołać się do tablicy wsk[a][b], odwołujesz się wsk[x * a
@alibi_m: Wiem, ale chciałem pobrać multum różnych wskaźników, nie tylko oscylatorów i obliczanie wszystkiego gdzies tam w excelu bylo by po prostu mega niewygodne, dlatego pytam o stronkę, gdzie mogę dostać takie dane.
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 #
@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,
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
@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
@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ć
Cześć miraski, robię coś podobnego tanków na zaliczenie i mam problem z prawdopodobnie wyciekiem pamięci. Siedzę na tym już od kilku dni i nadal nie wiem co robię nie tak. Prawdopodobnie coś się #!$%@? przy usuwaniu Tanka. Dołączam kod.:

*Metoda w game wyglada tak metoda w game

*Metoda checkShoot wyglada tak: metoda w klasie collision

*Destruktor EnemyTanka jest pusty, bo dziedziczy po klasie Tank, ale destruktor Tanka wyglada tak(posiada od wektory wskaznikow
@lmrocks: Nie jedyne, wyzej masz ze dwie podpowiedzi co mozna robic. Ale jest to jedyne, ktore wprowadzi lad w twoj kod. Gdy przestaniesz uzywac golych wskaznikow tam gdzie jest to niepotrzebne i sprytnych wskaznikow tam gdzie jednak musisz miec wskaznik, to wycieki znikna.
@Ajdont: Jeżeli oba wskaźniki wskazują na tę samą tablicę (lub jeden element za nią) to wynikiem odejmowania będzie ptrdiff_t. W przeciwnym wypadku to undefined behavior. Jego wielkość jest oczywiście implementation defined i zależy od wielkości pointera. W twoim przypadku ma on zapewne taki sam rozmiar co int, więc nie jest generowane żadne ostrzeżenie.