Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> C++ Przekazywanie tablicy do funcji
licha
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 7.12.2010

Ostrzeżenie: (0%)
-----


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" ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
gam3r
post
Post #2





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 8.06.2005

Ostrzeżenie: (0%)
-----


słyszałeś o wskaźnikach może? ;-)

http://stackoverflow.com/questions/2867783...ction-arguments
Go to the top of the page
+Quote Post
licha
post
Post #3





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 7.12.2010

Ostrzeżenie: (0%)
-----


tak słyszałem ale wyleciały mi z głowy. Thx zobaczymy co teraz wyjdzie
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
devbazy
post
Post #5





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


Skorzystaj z std::vector, tak jak polecił Ci zegarek84. Wyjdzie Ci to na dobre.
Go to the top of the page
+Quote Post
cepa
post
Post #6





Grupa: Zarejestrowani
Postów: 125
Pomógł: 7
Dołączył: 27.01.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował cepa 16.11.2012, 19:27:00
Go to the top of the page
+Quote Post
solificati
post
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 10
Dołączył: 17.03.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.12.2025 - 17:34