2009-11-08 9 views
8

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?

+1

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

cevap

26

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:

  1. tahsis (malloc) Yeni bir dizi C (muhtemelen elemanların sayısını ve sizeof 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) (
  2. Belleği B'den C + A uzunluğuna kopyalayın (bkz. 1).
  3. 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.
+0

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

+2

@AndreyT: "a" işaretçiniz. Diğer yanıt hakkındaki yorumunuzda bunun farkındasınız gibi görünüyorsunuz ... – Shog9

+0

@ 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