Her iki orijinal dizinin öğelerini içeren tek bir diziyi elde etmek için iki diziyi nasıl birleştirebilirim?C'deki iki diziyi nasıl birleştirebilirim?
cevap
C dizileri basitçe, başlangıçlarının bir göstergesi olan, bitişik bir bellek alanıdır *. Bu yüzden onları birleştirme içerir:
- tahsis (
malloc
) Yeni bir dizi C (muhtemelen elemanların sayısını vesizeof
her element bilmesi gerekir), diziler A ve B uzunluğunu bulun o A + B boyutudur. A'dan C'ye kadar olan belleği kopyala (memcpy
) ( - Belleği B'den C + A uzunluğuna kopyalayın (bkz. 1).
- Sen de-ayırmaya da (
free
) istemek A'nın bellek ve B bu pahalı bir operasyon olduğunu
Not, ancak bu temel teori olabilir. Biraz soyutlama sağlayan bir kütüphane kullanıyorsanız, daha iyi olabilirsiniz. Eğer A ve B daha karmaşıksa, basit bir dizi (örneğin, sıralı diziler), daha akıllı kopyalamayı yapmanız gerekecektir, daha sonra 3 ve 4. adımları (bakınız: how do i merge two arrays having different values into one array).
- bu soruya amacıyla da, işaretçi açıklama açıkçası (ve aşağıda yorumcu pasifize için), yeterli olacaktır: C bir dizinin kavramı vardır, bu olmadan kullanılabilir işaretçiler sözdizimi. Bununla birlikte, uygulama, bir C dizisi ve bitişik bir bellek alanıdır, bir işaretçi ile yeterince yakın olabilirler ve çoğu zaman, birbirlerinin yerine kullanılabilirler.
"... başlangıçlarına bir işaretçi ..." nereden geldi? Int [10] 'u bildirdiğimde, 10 'int' ile bitişik bir bellek alanı alıyorum ve hiçbir işaretçi yok. – AnT
@AndreyT: "a" işaretçiniz. Diğer yanıt hakkındaki yorumunuzda bunun farkındasınız gibi görünüyorsunuz ... – Shog9
@ Shog9: 'a' bir işaretçi değil. 'a' bir dizidir. Dizi tipi, işaretçi türüne bozulduğunda, sonuç gösterici, "a" ile ilgisi olmayan bir geçici ara değerdir. Özellikle 'malloc' dizileri hakkında konuşmazsa, yukarıdaki postaların durumu yanlıştır. – AnT
Evet ... Her iki yanıt da "birleştirme" yorumlamasına yanıt verdiği ve OP'nin açıklığa kavuşturulmadığı için, bu sorunu yansıtmak için bu soruyu düzenledim. – Shog9