Des moyens pour créer des dynamiques de la matrice en C?
C'est le seul moyen que je connaisse pour créer une matrice (tableau 2D) dans C, de manière dynamique, et la lecture de saisie de l'utilisateur dans ses éléments:
-
La création d'un pointeur sur un tableau de
x
pointeurs, où chaque pointeur
représente une ligne de la matricex
est le nombre de lignes dans la matrice (sa hauteur). -
Pointant chaque pointeur dans ce tableau un tableau avec
y
éléments,
oùy
est le nombre de colonnes dans la matrice (la largeur).
int main()
{
int i, j, lines, columns, **intMatrix;
printf("Type the matrix lines:\t");
scanf("%d", &lines);
printf("Type the matrix columns:\t");
scanf("%d", &columns);
intMatrix = (int **)malloc(lines * sizeof(int *));
//pointer to an array of [lines] pointers
for (i = 0; i < lines; ++i)
intMatrix[i] = (int *)malloc(columns * sizeof(int));
//pointer to a single array with [columns] integers
for (i = 0; i < lines; ++i)
{
for (j = 0; j < columns; ++j)
{
printf("Type a number for <line: %d, column: %d>\t", i+1, j+1);
scanf("%d", &intMatrix[i][j]);
}
}
Il existe d'autres moyens pour ce faire?
Avez-vous réellement besoin d'une autre manière?
Merci de lire parashift.com/c++-faq/multidim-arrays2.html pour les tableaux multidimensionnels.
Merci de lire parashift.com/c++-faq/multidim-arrays2.html pour les tableaux multidimensionnels.
OriginalL'auteur tempy | 2012-10-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer comme ceci
**intMatrix
) et la vôtre (*intMatrix
)? Comment vais-je accéder aux éléments de la matrice à l'intérieur de la fonction? Merci.vous pouvez passer à la fonction que
int *matrix
puis de calculer l'élémentintMatrix[i*lines + j]
comme indiqué dans l'exemple.OriginalL'auteur Raj
De C99 à partir de (mais pas du C++), vous pouvez utiliser la variable de tableaux de longueur:
Ou même comme ceci:
Mais, dans les deux cas, le tableau de données est stocké sur la pile, pas le tas, donc il n'y a aucun moyen de stocker correctement, et vous ne pouvez pas le mettre dans une struct ou quoi que ce soit malloc.
Il y a un C85? Je suis conscient de C89 (aka C90), C99, et C11. Véritable code utilise quel que soit le compilateur permet, standard ou autrement. 🙂
Oups, je voulais dire C89 🙂
OriginalL'auteur ams
utilisation
realloc
,memcpy
,memmove
etfree
de modifier les blocs de la matrice. Pour accéder à unique elemnts utiliser quelque chose commemem[row*cols+col]
oumem[rows*col+row]
dépendent de ce qui est prioritaire pour vous (ou ce que vous définissez une ligne et d'une colonne).OriginalL'auteur drahnr