Rassure-nous, on est quand meme pas en train de te faire ton projet 
[quote=« Maverick, post:3, topic: 28929 »]je déclare deux tableaux deux dimensions :
// declaration du tableau stockage des requetes
int requetes[tailleV->nombre_requetes][NOMBRE_COLONNES_REQUETES];
et je tente de les passer en paramètre, le compilateur n’est pas content content :P.
Je n’arrive d’ailleurs pas à m’imaginer ce que représente int**…[/quote]
C’est normal, ton compilateur est sévère mais juste.
[code]#include <stdio.h>
#include <stdlib.h>
int
somme(int** tbl, int tx, int ty)
{
int i, j, somme = 0;
for (i = 0; i < tx; i++)
for (j = 0; j < ty; j++)
somme += tbl[i][j];
return somme;
}
int
main(void)
{
int x = 3;
int tab[3][4];
int tab2[4];
printf(« \n%d », somme((int**)tab2, 3, 4));
return 0;
}[/code]
Déjà, dans la norme, on ne devrait pas pouvoir déclarer un tableau avec une taille non-constante, c’est déjà bien que cela passe.
Ensuite, en C, dans une déclaration de fonction, tu as le droit de mettre int myfun(int t[3][4])
ou int myfun(int** t)
, point final. Tu es d’accord que ce sont deux types différents? Eh bien, c’est ce qui explique la conversion de type (‹ cast ›) que j’ai dü réaliser dans codetab2[/code].
Voilà, ca devrait calmer ton compilateur (qui est ton ami: tous ses messages sont justifiés).
Quant au pourquoi du int**, je te recommande grandement de t’immerger dans ton cours rapidement. En gros, int mytab[3], int mytab[3][4] sont des écritures un peu spéciales pour désigner un type de tableau dont la taille doit correspondre à un nombre bien défini (utile pour représenter un point 3d). En fait, en C, la notation universelle et courante est celle des pointeurs. Cela donne: int* et int** respectivement. Quant aux tailles, il faut que tu les stockes séparément.
Alors pourquoi deux *? Bon, voilà la manière générale de créer des tableaux en 1 et 2 dimensions en C:
.
int* l1 = (int*) malloc(4 * sizeof(int));
int* l2 = (int*) malloc(4 * sizeof(int));
int* l3 = (int*) malloc(4 * sizeof(int));
int** tab3 = (int**) malloc(3 * sizeof(int*));
tab3[0] = l1;
tab3[1] = l2;
tab3[2] = l3;
.
l1 est une des 3 lignes de ta matrice. malloc va allouer un espace mémoire suffisant pour chaque ligne, et en retourner l’adresse sous forme de pointeur. Comme on pointe une série de int, le type est int*. Le cast qui est présent est dü au fait que malloc renvoie un pointeur sur n’importe quoi (void*), alors que l1 est pointeur sur int seulement.
tab3, maintenant. Ta matrice, ca va etre un tableau contenant tes trois lignes. Donc, sa taille est de 3, et le type contenu est int*, et non plus seulement int. tab3 pointe sur une série de int*, il est de type int**.
Ok?