Globalna Dynamiczna Tablica

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.

0

Podejrzewasz słusznie.

int *globalTable;

int main(void)
{
   globalTable=new int[10];
  
   return 0;
}
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ę!

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" ;)
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.

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 :)

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

0

Ok, dzięki za pomoc :)

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