Je vais supposer que la fonction foo
dans votre exemple veut réellement un tableau 2-D de int
, avec MAX
colonnes et un nombre non spécifié de lignes. Cela fonctionne en C et C++ en raison de la disposition des lignes en mémoire. Tous les éléments de la ligne N + 1 apparaissent de manière contiguë après tous les éléments de la ligne N.
La syntaxe int arr[][MAX]
demande un pointeur vers le premier élément d'un tel tableau 2-D, pas un tableau de pointeurs vers des lignes. Je suppose que vous voulez le tableau 2-D, et pas un tableau de pointeurs.
D'abord, vous devez allouer correctement vos éléments. Vous n'avez pas précisé quelle est la dimension la plus à gauche de arr[][MAX]
, ou d'où elle vient. Je suppose qu'il est dans la dim
variables ici:
int (*ptr)[MAX]; /* pointer first element of an int[][MAX] array */
/* Allocate a 2-D array of dim * MAX ints */
ptr = (int (*)[MAX]) malloc(dim * MAX * sizeof(int));
Ensuite, appeler votre fonction, juste faire foo(ptr)
et cela fonctionnera sans erreurs ou des avertissements. Pour rendre votre code plus propre (en particulier si vous utilisez plusieurs de ces baies 2-D), vous pouvez envisager d'entourer le type de pointeur dans un typedef
et d'écrire une petite fonction pour allouer ces baies.
typedef int (*int_array_2d)[MAX];
int_array_2d alloc_int_array_2d(int dim1)
{
return (int_array_2d) malloc(dim1 * MAX * sizeof(int));
}
De cette façon, ailleurs dans votre code, vous pouvez dire quelque chose beaucoup plus simple et plus propre:
int_array_2d ptr = alloc_int_array_2d(dim);
Utilisez le système de type à votre avantage. La syntaxe C et C++ pour le type et le typecast sont moche, et peu familier à la plupart des gens. Ils semblent étranges en raison de la préséance de *
vs []
. Cependant, si vous le cachez dans un typedef
, cela peut vous aider à rester concentré sur ce que vous essayez de faire, plutôt que de comprendre les problèmes de précédence étranges de C/C++ qui surviennent lorsque vous mélangez des tableaux et des pointeurs.
paramètres 'foo' semble être nécessaire un autre. – BLUEPIXY
voir http://stackoverflow.com/a/14549030/399317 – Kos
@BLUEPIXY 'foo paramètres semble être nécessaire un autre' Que diable cela signifie BLUEPIXY? –