J'essaie de déterminer comment fusionner un tableau 2D en un.
J'ai un tableau 2D qui ressemble comme suit: p> J'essayais de Utilisez une boucle imbriquée mais n'ayant pas de chance. p> p>
3 Réponses :
Faites ceci:
#include <string.h> /* for memcpy() */
#define ROW (2)
#define COL (10)
int main(void)
{
int array[ROW][COL] = {
{ 2, 6, 12, 18, 23, 55, 57, 58, 59, 60},
{ 1, 3, 5, 9, 11, 19, 27, 28, 31, 56}
};
int array1D[ROW*COL];
memcpy(array1D, array, ROW*COL * sizeof(int));
}
Simple mais efficace.
C'est ce que vous essayiez de faire. P> memcpy code> n'est pas garanti de fonctionner. Vous fabriquez techniquement un tableau de matrices et, en fonction de la manière dont la mémoire pour chaque matrice «linéaire» est allouée, memcpy code> peut ou non fonctionner. Il sera probablement #include <stdio.h>
#define ROW 2
#define COL 10
int
main(void)
{
int array[ROW][COL] ={ {2,6,12,18,23,55,57,58,59,60} , {1,3,5,9,11,19,27,28,31,56}};
int i,j;
int array1D[ROW*COL];
for (i=0; i<ROW; i++){
for (j=0; j<COL; j++){
array1D[i*COL+j]=array[i][j];
}
}
for (i=0; i<ROW*COL; i++){
printf("%d ",array1D[i]);
}
}
Un tableau de matrices est exactement ce qui est communément et le plus correctement appelé un "tableau 2D" dans C. Je pense que vous le confondez avec un éventail de pointeurs, ce qui est en effet différent, même si elle peut être accessible avec une syntaxe similaire. Tous les éléments int code> Les éléments des tableaux de membre de l'OP sont garantis de manière séquentielle en mémoire et les deux matrices de membres sont également garantis de manière séquentielle.
Vrai. Ce que j'essayais de souligner, c'est que ce n'est pas un concept indépendant comme une matrice est dans Matlab ou dans d'autres langues. Array [a] [b] n'accède pas "Point A, b." Vous obtenez la valeur de l'index B dans le tableau A. Je vais éditer cette partie.
Vous avez pris le point de terminologie, mais semblait avoir manqué le point de sémantique de langue plus significatif: il n'y a aucune ambiguïté ni question sur la manière dont les membres de la matrice OPS sont définis en mémoire, à moins que vous ne souhaitiez parler de détails de la représentation de type int code>. Le premier tableau 1D est d'abord, à l'adresse la plus basse de la matrice 2D, et le second suit immédiatement sans rembourrage avant ou après. Dans chacun, les éléments int code> sont définis consécutivement, encore une fois sans rembourrage. Cet arrangement est indiscernable à partir de celui d'un tableau 1D de rangée * col code> int.
/* merge nbyA bytes of data in a with nbyB bytes of data in b. Return result. */
void *merge(const void *a, size_t nbyA, const void *b, size_t nbyB)
{
void *buf = malloc(nbyA + nbyB);
if (buf) {
memcpy(buf, a, nbyA);
memmove(buf + nbyA, b, nbyB);
}
return buf; /* caller must free */
}
To a pass array[0]; to b pass array[1].The advantage of this solution is that you have a generalized merge function that can be used for more than just merging two subarrays of a 2D array, but for merging any two blocks of data.
Ce n'est pas clair ce que vous rencontrez, mais votre syntaxe d'initialisateur a besoin d'un ensemble supplémentaire d'accolades frisées autour des deux initialisateurs membres. Si cela ne résout pas votre problème, veuillez présenter un exemple de reproductible minimal qui démontre le problème.
Fusionner un tableau 2D dans un code> Vous devez définir ce que cela signifie.Comment souhaitez-vous la fusionner? Premier numéro de premier tableau, premier numéro de 2e matrice, 2e numéro de 1ère tableau, 2ème numéro de 2e matrice et ainsi de suite?
Ce
intora [rangée] [col] = {2,6,12,18,23,55 57,58 59,60}, {1,3,5,9,11,19,27, 28,31 56}; code> n'est pas valide C.