2009-11-08 28 views
8

¿Cómo concateno dos matrices para obtener una única matriz que contenga los elementos de ambas matrices originales?¿Cómo puedo concatenar dos matrices en C?

+1

Sí ... Dado que ambas respuestas parecen responder a la interpretación de "concatenación", y el OP no ha vuelto a aclarar, he editado la pregunta para reflejar esto. – Shog9

Respuesta

26

Las matrices en C simplemente son un área contigua de memoria, con un puntero a su inicio *. Así que la fusión de los involucra:

  1. encontrar la longitud de las matrices A y B, (que probablemente necesitará saber el número de elementos y la sizeof cada elemento)
  2. Asignación (malloc) una nueva matriz C que es el tamaño de A + B.
  3. Copia (memcpy) la memoria de A a C,
  4. Copie la memoria de B a C + la longitud de A (consulte 1).
  5. Es posible que desee también para desasignar (free) la memoria de A y B.

Tenga en cuenta que esta es una operación costosa, pero esta es la teoría básica. Si está utilizando una biblioteca que ofrece algo de abstracción, es posible que esté mejor. Si A y B son más complicados que una matriz simple (por ejemplo, arreglos ordenados), tendrá que hacer una copia más inteligente, luego los pasos 3 y 4 (consulte: how do i merge two arrays having different values into one array).


  • Aunque el propósito de esta cuestión, la explicación puntero será suficiente, en sentido estricto (y para apaciguar el autor del comentario más abajo): C tiene el concepto de una matriz, que se puede utilizar sin el sintaxis de punteros. En lo que respecta a la implementación, sin embargo, una matriz en C y un área contigua de memoria, con un puntero, están lo suficientemente cerca que pueden ser, y a menudo se usan, indistintamente.
+0

¿De dónde vino "... con un puntero a su comienzo ..."? Cuando declaro 'int a [10]' obtengo un área contigua de memoria con 10 'int' y ningún puntero en absoluto. – AnT

+2

@AndreyT: 'a' es su puntero. Parece ser consciente de esto en su comentario sobre la otra respuesta ... – Shog9

+0

@ Shog9: 'a' no es un puntero. 'a' es una matriz. Cuando el tipo de matriz decae a tipo de puntero, el puntero resultante es solo un valor temporal intermedio, que no tiene nada que ver con 'a'. Aunque los estados posteriores a la publicación son incorrectos, a menos que se trate específicamente de matrices 'malloc'ed. – AnT