Globalna Dynamiczna Tablica

Odpowiedz Nowy wątek
2011-08-07 11:34
0

Wiem, że odpowiedź na to pytanie pewnie znajduje się w kompendium wiedzy, jednak ja niestety jej tam nie znajduję i dlatego postanowiłem napisać posta tutaj. Podejrzewam, że rozwiązanie tkwi we wskaźnikach, lecz pomimo moich wielu prób, nie udaję mi się rozwiązać problemu. Chodzi po prostu o zadeklarowanie globalnej tablicy, o której rozmiarach będzie decydował użytkownik, po prostu będzie podawał ilość elementów tablicy. Tablica musi być globalna, ponieważ inne funkcje muszą mieć do niej dostęp.

Z góry dzięki za odpowiedź.
Pozdrawiam.

Pozostało 580 znaków

2011-08-07 12:29
0

Podejrzewasz słusznie.

int *globalTable;
 
int main(void)
{
   globalTable=new int[10];
 
   return 0;
}

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-08-07 12:31
0

w C:

int *tab;

int main( void ) {
    int size;
    scanf( "%d", &size );

    tab = ( int* )malloc( sizeof( int ) * size );

    free( tab );
    return EXIT_SUCCESS;
}

w C++:

int *tab;

int main() {
    int size;
    cin >> size;

    tab = new int[size];

    delete []tab;
    return EXIT_SUCCESS;
}

//edit
hm uprzedzili mnie ;p

choć MasterBLB powinieneś zdecydować się w czym piszesz (mimo, że autor tego nie określił), czy w C (int main(void)) czy C++ (new int[10];)

//edit
oj rzeczywiście, zwracam innym uwagę a sam strzelam byki, dzięki Kumashiro za poprawkę!

edytowany 5x, ostatnio: nwnuinr, 2011-08-07 12:49
Yaasne,bo użycie operatora new jest taakie nieoczywiste ;] - MasterBLB 2011-08-07 12:56

Pozostało 580 znaków

2011-08-07 12:39
Kumashiro
0
nwnuinr napisał(a)

w C:
int *tab;

int main( void ) {
int size;
scanf( "%d", &size );

tab = ( int* )malloc( sizeof( int ) * size );

delete []tab;
return EXIT_SUCCESS;

}



Prawda, tylko "free(tab)" zamiast "delete []tab" ;)

Pozostało 580 znaków

2011-08-07 13:34
0
pavon147 napisał(a)

Tablica musi być globalna, ponieważ inne funkcje muszą mieć do niej dostęp.

To nie jest usprawiedliwienie.
Globalne zmienne, tablice są z gruntu złe (ang. evil) i nie należy ich stosować.
Jeśli już koniecznie masz zbiór wartości, które chcesz używać wszędzie to zastosuj wzorzec "kontekst" - czyli "namiar" - ID lub wskaźnik na strukturę zawierającą zmienne globalne.
Problem pojawi się gdy będziesz chciał użyć dwóch kopii zmiennych globalnych w jednym programie.

Pozostało 580 znaków

2011-08-07 16:49
0
nwnuinr napisał(a)

w C:


int *tab;

int main( void ) {
int size;
scanf( "%d", &size );

tab = ( int* )malloc( sizeof( int ) * size );

free( tab );
return EXIT_SUCCESS;

}

> 
> w C++:
> 

int *tab;

int main() {
int size;
cin >> size;

tab = new int[size];

delete []tab;
return EXIT_SUCCESS;

}


> 
> //edit
> hm uprzedzili mnie ;p
> 
> choć MasterBLB powinieneś zdecydować się w czym piszesz (mimo, że autor tego nie określił), czy w C (int main(void)) czy C++ (new int[10];)
> 
> //edit
> oj rzeczywiście, zwracam innym uwagę a sam strzelam byki, dzięki Kumashiro za poprawkę!

Super, dzięki wszystkim za odpowiedzi, ale mam pytanie, o co chodzi w linijce: tab = new int[size]; oraz delete []tab; ? Jeśli mógłbym prosić o wytłumaczenie...
I z EXIT_SUCCESS też się jeszcze nie spotkałem...
A piszę w C++ ofc :)
edytowany 1x, ostatnio: pavon147, 2011-08-07 16:53

Pozostało 580 znaków

2011-08-07 17:36
0

Poczytaj o operatorach new i delete to są totalne podstawy i materiałów w sieci na ten temat są miliony...
return EXIT_SUCCESS; jest równoważne z return 0; - też podstawy


Pozostało 580 znaków

2011-08-07 21:30
pavon147
0

Ok, dzięki za pomoc :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0