Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: C++ Przekazywanie tablicy do funcji
Forum PHP.pl > Inne > Hydepark
licha
Witam nie programuję jeszcze jakoś wybitnie ale w szkole jako tako wyróżniam się i postanowiłem napisać coś trudniejszego - Pokera ale to tak mało ważne.
zastanawiam się jak wysłać z funkcji głównej całą tablicę z danymi. Oto mój kod.

Funkcja sprawdz. :
int sprawdz(int karta, int kolor, int lista_kart[], int lista_kolorow[])
{
for(int i=1;i<10;i++)
{
if(karta== lista_kart[i] && kolor ==lista_kolorow[i])
{
return 1;
}
else
{
return 0;
}
}
}


fragment funkcji głównej :

int gracz1_karty[3];
int gracz1_kolor[3];
int karty[10];
int kolor_karty[10];
(...)
do
{
gracz1_karty[i]=losuj_karte();
gracz1_kolor[i]=losuj_kolor();
int sprawdzenie; sprawdzenie=sprawdz(gracz1_karty[i],gracz1_kolor[i],karty,kolor_karty);
(...)
}while(sprawdzanie==0);



teraz jak przekacać całą tablice "karty" i całą tablicy "kolor_karty" ?
gam3r
słyszałeś o wskaźnikach może? ;-)

http://stackoverflow.com/questions/2867783...ction-arguments
licha
tak słyszałem ale wyleciały mi z głowy. Thx zobaczymy co teraz wyjdzie
zegarek84
musisz przekazać początek i koniec tablicy (koniec jest za tablicą - tak się przyjęło w c++), więc wskaźnik początkowy i końcowy, lub wskaźnik na tablicę i liczbę wskazującą na jej wielkość... w C++11 masz jeszcze do dyspozycji std::begin i std::end które działa z tablicami oraz kontenerami...

zapominając o powyższym, to mógłbyś sobie ułatwić sprawę nie zagłębiając się w język i skorzystać z któregoś z kontenerów, np. std::vector... a jeśli piszesz grę to interfejs graficzny najłatwiej pisze się w Qt, w nim dodatkowo wszystko masz zdefiniowane, nawet własne kontenery itd...
devbazy
Skorzystaj z std::vector, tak jak polecił Ci zegarek84. Wyjdzie Ci to na dobre.
cepa
w C/C++ tablica jest wskaznikiem, wlasciwie jest to wskaznik na pierwszy (zerowy) element tablicy, dlatego na "tablicy" dziala arytmetyka wskaznikow, sposob ktory uzylez zadziala, np:

Kod
#include <iostream>

#define N 10

using namespace std;

void dupa(int tab[], int rozmiar)
{
    for (int i = 0; i < rozmiar; i++) {
        tab[i] = i;
    }
}

int main()
{
    int tablica[N];
    dupa(tablica, N);
    for (int i = 0; i < N; i++) {
        cout << tablica[i] << endl;
    }
    return 0;
}


tablica to tylko wskaznik i nie ma rozmiaru, ten musisz trzymac osobno, dlatego wygodnie jest uzywac kontenerow z STL w tym std::vector,

istnieje jeszcze jeden sposob przekazania tablicy do funkcji ktory umozliwia modyfikacje tablicy poprzez "wyluskiwanie":
Kod
void dupa(int **ptr) {
    int *tablica = *ptr;
}
/////
int tablica[100];
dupa(&tablica);

tego sie uzywa np: jak chcesz zmienic rozmiar, usunanc tablice itp
solificati
Cytat(cepa @ 16.11.2012, 19:26:16 ) *
w C/C++ tablica jest wskaznikiem, wlasciwie jest to wskaznik na pierwszy (zerowy) element tablicy, dlatego na "tablicy" dziala arytmetyka wskaznikow,

Prawie. Nazwa tablicy jako r-value jest domyślnie rzutowana na wskaźnik do pierwszego elementu tablicy. Nie zmienia to faktu, ze to rozwiązanie zadziała.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.