• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

przekazywanie tablic do funkcji

VPS Starter Arubacloud
0 głosów
865 wizyt
pytanie zadane 1 października 2017 w C i C++ przez qlucha Obywatel (1,790 p.)

Witam , zastanawia mnie jeden szczegół w programowaniu . I prosiłbym o odpowiedz, 

Czy istnieje możliwość posłania kopi Tablicy do funkcji czy nie ma takiej możliwośći , chodzi mi o samą możliwość ,wiem ,że jest to bardzo mało praktyczne i stwarza wiele problemów pod względem technicznym ale chodzi mi o samą możliwość  tak jak odbywa się to na zmiennej  przy przekazywaniu poprzez wartość ,  Czy zawsze posyłając tablice do funkcji będę operować na oryginale i trzeba uważać przy probie jakiejkolwiek operacji zapisu i zmiany danych w poszczególnych komórkach tablicy. frown

2 odpowiedzi

+3 głosów
odpowiedź 1 października 2017 przez Patrycjerz Mędrzec (192,340 p.)
Jedynym punktem dostępu tablicy po jej stworzeniu jest adres jej pierwszego elementu — jedynie taką funkcjonalność oferuje język i trzeba się z nią liczyć.

Aby skopiować tablicę, musisz to zrobić ręcznie (np. w pętli) na zewnątrz/wewnątrz funkcji lub korzystając z kontenerów, np. vectora.
komentarz 1 października 2017 przez qlucha Obywatel (1,790 p.)

Dzieki wlasnie o taką odpowiedz  mi chodziło bo się pogubiłem  ale nieznacznie , Tez zastanawialem sie czy aby recznie nie utworzyc kopi zabezpieczajacej oryginal . 

Teraz już wiem na 100% o co kaman smileyyes dzieki za Odp.

komentarz 1 października 2017 przez Patrycjerz Mędrzec (192,340 p.)

Jeśli chodzi o tego vectora, możesz użyć range constructor:

// the iterator constructor can also be used to construct from arrays:
int myints[] = {16,2,77,29};
std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );

Źródło: http://www.cplusplus.com

komentarz 1 października 2017 przez qlucha Obywatel (1,790 p.)

Ok dzieki za kod i link .smiley

1
komentarz 1 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Ja od siebie bardzo polecam używanie kontenerów STL (std::vector, std::array itd.) zamiast standardowych tablic. Wydajnościowo różnicy nie ma chyba żadnej, a znacznie przyjemniej pisze się kod.

Jeśli chodzi o przekazywanie takiego kontenera, jako parametru funkcji, to całkiem fajnym rozwiązaniem jest użycie iteratorów. Przykładowo, piszemy własną funkcję sortującą. Możemy zrobić coś takiego:

template <class Iterator>
void mySort(Iterator first, Iterator last)
{
    // Jakiś tam kod :)
}

Później możemy tej funkcji używać dla różnych kontenerów, nie zawężamy możliwości tej funkcji tylko dla jednego typu.

std::array<int, 5> myArray = {2, 9, 3, 1, 2};
mySort(myArray.begin(), myArray.end());

std::vector<double> myVector = {2.4, 22.0, -2.3, 94.2, -12323.32};
mySort(myVector.begin(), myVector.end());

P.S.

Teraz patrzę, że troszkę nie na temat, ale co tam. Może komuś się przyda wink

komentarz 1 października 2017 przez Patrycjerz Mędrzec (192,340 p.)

Jak to niektórzy mówią… "Od przybytku głowa nie boli" smiley

0 głosów
odpowiedź 2 października 2017 przez criss Mędrzec (172,590 p.)

Tablica sama w sobie jest w c++ po prostu blokiem pamięci przy czym nazwa tablicy (zmienna tablicowa?) jest wskaźnikiem na ten blok - adresem w którym blok się zaczyna czyli adresem pierwszego elementu. Dlatego "kopiowanie tablicy" jest przekopiowaniem tego wskaźnika. Nadal mamy ten sam adres - ten sam blok pamięci. Możesz jednak skorzystać z tego, że tablica (zadeklarowane jako tablica a nie jako wskaźnik wskazujący na zaalokowaną potem tablice) będąca polem klasy jest faktycznie przekopiowywana z całym obiektem. Tzn. nowy obiekt stworzony kopiując inny obiekt tworzy nowy blok pamięci (tablice) i przekopiowuje wszystkie dane w tym bloku. Taka klasa juz jest w bibliotece standardowej - std::array.

Podobne pytania

+1 głos
2 odpowiedzi 394 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)
–2 głosów
5 odpowiedzi 466 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)
0 głosów
2 odpowiedzi 596 wizyt
pytanie zadane 17 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...