Tableau 2D initialisation du C

Je sais c'est une vieille histoire, mais je veux un petit tableau 2D allouée statiquement dans mon code. Je sais que la façon de le faire est:

static int A[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };

C'est très bien et je peux accéder à tous les membres. Cependant j'ai plusieurs problèmes en passant à une fonction, par exemple:

void print_matrix(int **a, int r, int c)
{
    int x, y;

    for(x = 0; x < r; x++)
    {
        printf("Row %02d = %#x = ", x, a[x]);

        for(y = 0; y < c; y++)
        {
            printf("%s%d", (0 == y) ? "" : ", ", a[x][y]);
        }
        printf("\n");
    }
}

Tout d'abord, je ne peut pas simplement passer A à la fonction, j'ai besoin de cast (int **). Depuis char * est synonyme de char [], j'ai été un peu surpris. Deuxièmement, il se bloque et quand je vérifie dans le débogueur, au sein de la sous-fonction, a[0] est signalé comme 1 et pas un pointeur vers un tableau d'entiers.

Je sais qu'il est de compilateur/langage C les arcanes de la magie qui se passe ici. Mais cela est un peu déroutant. Si j'essaie d'initialiser:

static int *A[3] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };

Je reçois une tonne de mises en garde. Comment est-ce différent:

static char *S[3] = { "hello", "there", "stackoverflow" };

Indépendamment de la question des arcanes C de la magie, qui de toute façon je n'ai jamais appris malgré plus d'une décennie de la programmation en C :(, je voudrais savoir comment générer mon tableau afin que je puisse passer avec succès comme une int ** sans avoir à passer par toutes les fag des boucles for ou la copie de la allouée statiquement tableau alloué dynamiquement.

Serait la suite des travaux?

int *A0 = { 1, 2 };
int *A1 = { 3, 4 };
int *A2 = { 5, 6 };
int **A = { A0, A1, A2 };

Est-il plus agréable que cette de le faire?

Merci à tous.

P. s. Je sais que dans la vraie vie, nous lisions des valeurs à partir d'une base ou d'un fichier en des tableaux alloués dynamiquement et d'éviter tout ce genre de choses.

Que captcha trucs pour soumettre une question suce! La première, avait deux lettres qui se chevauchent, et la deuxième était tout flou totale illisibilité! J'ai fait la audio défi et pouvait à peine entendre la seconde partie.

OriginalL'auteur AlastairG | 2010-12-10