C++: la taille de la ligne d'un tableau multidimensionnel passés à une fonction

Je suis en train d'écrire une fonction qui permet d'imprimer le contenu d'un tableau multidimensionnel. Je sais que la taille des colonnes, mais pas la taille des lignes.

EDIT: Depuis que je ne l'ai pas claires, les tableaux passés à cette fonction ne sont PAS alloués dynamiquement. Les tailles sont connus au moment de la compilation.

Je suis en train de tester à l'aide d'une 3x2 tableau. Ici est la fonction qu'il représente:

void printArrays(int array1[][2], int array2[][2]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            cout << "\narray1[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array1[i][j]
                 << "\tarray2[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array2[i][j];
        }
    }
}

Évidemment, cela ne fonctionne que si je sais que la taille du "je" est de 3 (il est dans ce cas). Idéalement, toutefois, je voudrais que la fonction de travail quelle que soit la taille de la première dimension.

Je pensais que je serais en mesure de le faire à l'aide de la sizeof() de la fonction, par exemple,

int size = sizeof(array1);

... et de faire quelques calculs à partir de là.

Voici l'étrange partie. Si j'utilise le sizeof() la fonction à l'intérieur de la matrice, il renvoie une valeur de 4. Je peux utiliser la notation pointeur à déréférencer le tableau:

int size = sizeof(*array1);

... mais en fait, cela renvoie une valeur de 8. C'est étrange, parce que la taille totale devrait être de lignes (= 3) * colonnes(= 2) * sizeof(int)(= 4), ou 24. Et, en effet, c'est le résultat, quand j'ai utiliser sizeof(*tableau array1) à l'extérieur de la fonction.

Personne ne sait ce qui se passe ici? Plus important encore, quelqu'un aurait-il une solution?

OriginalL'auteur Karl Giesing | 2011-08-04