Jak połączyć dwie tablice, aby uzyskać pojedynczą tablicę zawierającą elementy obu oryginalnych tablic?Jak mogę połączyć dwie tablice w C?
Odpowiedz
Tablice w języku C są po prostu ciągłym obszarem pamięci ze wskaźnikiem do ich początku *. Więc ich łączenie obejmuje:
- Znajdź długość Macierze A i B (prawdopodobnie będzie trzeba znać liczbę elementów i
sizeof
każdy element) - przydzielania (
malloc
) nową tablicę C, które ma rozmiar A + B. - Skopiuj (
memcpy
) pamięć od A do C, - Skopiuj pamięć z B na C + na długość A (patrz 1).
- Możecie też chcą de-przeznaczyć (
free
) pamięć A i B.
pamiętać, że jest kosztowna operacja, ale to jest teoria podstawowe. Jeśli korzystasz z biblioteki zapewniającej pewną abstrakcję, możesz być lepiej. Jeśli A i B są bardziej skomplikowane niż prosta tablica (np. Posortowane tablice), będziesz musiał wykonać inteligentniejsze kopiowanie, a następnie kroki 3 i 4 (patrz: how do i merge two arrays having different values into one array).
- Chociaż dla celów tego pytania, wyjaśnienie wskaźnik wystarczą, ściśle rzecz biorąc (i dla uspokojenia poniższego commenter): C ma koncepcję tablicy, które mogą być używane bez składnia wskaźników. Wdrożenie mądre, jednak tablica C i ciągły obszar pamięci, ze wskaźnikiem są na tyle bliskie, że mogą być i często są używane zamiennie.
Skąd się wzięło "... ze wskaźnikiem na ich początek ..."? Kiedy deklaruję 'int a [10]' otrzymuję ciągły obszar pamięci z 10 'int' w nim i bez żadnych wskaźników. – AnT
@AndreyT: 'a' jest twoją wskazówką. Wydaje się, że jesteś tego świadomy w swoim komentarzu do drugiej odpowiedzi ... – Shog9
@ Shog9: 'a' nie jest wskaźnikiem. 'a' jest tablicą. Gdy typ tablicy rozpada się na typ wskaźnika, wynikowy wskaźnik jest po prostu pośrednią wartością tymczasową, która nie ma nic wspólnego z 'a'. Wątek nad powyższymi stanami jest niepoprawny, chyba że mówi konkretnie o tablicach "malloc". – AnT
- 1. Jak połączyć dwie tablice w Objective-C?
- 2. jak przeciąć dwie tablice w celu C?
- 3. JavaScript: jak połączyć/połączyć dwie tablice, aby połączyć się w jedną tablicę?
- 4. Jak mogę przypisać dwie tablice do skrótu w Perlu?
- 5. Jak wymieszać dwie tablice w Javie?
- 6. Jak scalić dwie tablice w słowniku?
- 7. w Numpy, jak spakować dwie tablice 2D?
- 8. Jak mogę łączyć tablice PHP?
- 9. Jak porównać dwie tablice obiektów?
- 10. PHP łączą dwie tablice wielowymiarowe
- 11. Jak zindeksować dwie tablice w MongoDB?
- 12. php dwie tablice wymiarów
- 13. Jak scalić dwie tablice obiektów w angularjs?
- 14. Jak połączyć dwie pętle foreach w jeden
- 15. Funkcja PHP zwracająca dwie tablice
- 16. Szyny łączące dwie tablice skrótów?
- 17. Połącz dwie tablice, zachowując klucze numeryczne
- 18. Java XOR ponad dwie tablice
- 19. Połączyć dwa numpy tablice w czwartym wymiarze
- 20. Jak połączyć dwie wartości __m128 do __m256?
- 21. Jak wydrukować dwie tablice obok skryptu bash?
- 22. Jak szybko połączyć dwie linie w Vimie?
- 23. Jak połączyć dwie macierze w Python OpenCV?
- 24. jak połączyć dwie tabele w postgresql
- 25. Jak połączyć dwie krotki w Pythonie?
- 26. Jak połączyć dwie tabele w zapytaniu?
- 27. Python połączyć dwie pętle
- 28. Połączyć dwie podkwerendy w MySQL
- 29. Jak dołączyć dwie ścieżki w języku C#?
- 30. Połączyć dwie lub więcej przestrzeni nazw C++ w jedną
Tak ... Ponieważ wydaje się, że obie odpowiedzi odpowiadają na interpretację "konkatenacji", a PO nie powrócił w celu wyjaśnienia, zredagowałem pytanie, aby to odzwierciedlić. – Shog9