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
Kochani, poddaje się. Przebrnąłem przez kila materiałów, ale się poddaje.

Jak w C++ stworzyć dynamiczną tablicę 2D (bez użycia vecotor) przy użyciu new
Chodzi mi o coś takiego:

int ** wsk = new int[x][y]
@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
  • Odpowiedz
@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.
  • Odpowiedz
@Roballo: Szczerze współczuję. Ale moƶesz mu powiedzieć potem, ƶe zawodowi programiści uwaƶają jego pytania za kretyńskie. Jak komis to komis :D
  • Odpowiedz
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
@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
  • Odpowiedz
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()
{
@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 używając jej na wskaźniku dostaniesz wartość na którą
  • 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ć %i lub %d w przypadku inta, oraz %f w przypadku float i double. Bo tak to chcesz uzyskać wartość funkcji wypisaną jakby była adresem, wydaje mi się, że chodzi Ci o coś innego, ale mogę się mylić. Druga sprawa to to, że powinieneś najpierw zainicjalizować zmienne przed ich użyciem, czyli przypisać im początkową wartość. Niektóre kompilatory nie przepuszczą użycia zmiennej bez wcześniejszego przypisania im
  • Odpowiedz
@Hertesus: Polecam poczytać książkę Stephena Praty o C, tam są dobrze opisane wskaźniki. I uważaj ze wskaźnikami. Łatwo sobie oko takim wskaźnikiem wybić.
  • Odpowiedz
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
Destruktor EnemyTanka jest pusty, bo dziedziczy po klasie Tank


@lmrocks: destruktor EnemyTanka powinien być wirtualny (nie wiem czy jest).

enemies[i] =
  • Odpowiedz
@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.
  • Odpowiedz
@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.
  • Odpowiedz