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

przekazywanie tablic do funkcji

Object Storage Arubacloud
0 głosów
892 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,320 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,320 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,320 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 397 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)
–2 głosów
5 odpowiedzi 486 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)
0 głosów
2 odpowiedzi 614 wizyt
pytanie zadane 17 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...