#1 Le 27/07/2007, à 13:58
- Romz
Déclarer une fonction retournant un tableau à 2 dim en C
Bonjour,
je débute en C, la question est dans le titre :
j'ai besoin d'une fonction qui me retourne un tableau à 2 dimensions. Comment la déclare-t-on?
Hors ligne
#2 Le 27/07/2007, à 14:35
- AuraHxC
Re : Déclarer une fonction retournant un tableau à 2 dim en C
ca depend de ce contient ton tableau =>
Genre si c'est des int je ferais
int** maFonction(tesParametre); // c'est le prototype de la fonction
Hors ligne
#3 Le 27/07/2007, à 14:37
- Romz
Re : Déclarer une fonction retournant un tableau à 2 dim en C
Oui, un tableau de int. Je vais essayer ça, merci.
Hors ligne
#4 Le 27/07/2007, à 14:50
- Romz
Re : Déclarer une fonction retournant un tableau à 2 dim en C
Non, ça ne marche pas. Une autre façon de faire?
Hors ligne
#5 Le 27/07/2007, à 14:55
- AuraHxC
Re : Déclarer une fonction retournant un tableau à 2 dim en C
Donne voir ton code a l'intérieur de ta fonction
Hors ligne
#6 Le 27/07/2007, à 15:00
- Romz
Re : Déclarer une fonction retournant un tableau à 2 dim en C
int* initPieces() {
int pieces[NB_PIECES][4] = {
{0, 4, 1, 0}, {0, 0, 1, 4}, {4, 0, 0, 4}, {1, 0, 0, 1},
{3, 2, 3, 3}, {2, 2, 2, 3}, {2, 2, 3, 3}, {2, 2, 3, 3},
{1, 2, 1, 0}, {4, 2, 4, 0}, {4, 2, 1, 0}, {1, 2, 4, 0},
{1, 3, 1, 0}, {4, 3, 4, 0}, {1, 3, 4, 0}, {4, 3, 1, 0}
};
return pieces;
}
ailleurs :
int pieces[NB_PIECES][4] = initPieces();
Je sais qu'on peut l'initialiser directement, mais par la suite je vais avoir besoin d'autres fonctions du même type qui font des "vrais" traitements...;)
Dernière modification par Romz (Le 27/07/2007, à 15:01)
Hors ligne
#7 Le 27/07/2007, à 15:05
- obiwankennedy
Re : Déclarer une fonction retournant un tableau à 2 dim en C
mais il faut surement que tu passes par un malloc parce que ton "pieces" à la sortie de ta fonction n'existe plus.
int** initPieces() {
int pieces[NB_PIECES][4] = {//pas bon ça
{0, 4, 1, 0}, {0, 0, 1, 4}, {4, 0, 0, 4}, {1, 0, 0, 1},
{3, 2, 3, 3}, {2, 2, 2, 3}, {2, 2, 3, 3}, {2, 2, 3, 3},
{1, 2, 1, 0}, {4, 2, 4, 0}, {4, 2, 1, 0}, {1, 2, 4, 0},
{1, 3, 1, 0}, {4, 3, 4, 0}, {1, 3, 4, 0}, {4, 3, 1, 0}
};
return pieces;
}
int** pieces = initPieces();//pour le retour plutot comme ça
un truc comme ça plutot.
Dernière modification par obiwankennedy (Le 27/07/2007, à 15:12)
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#8 Le 27/07/2007, à 15:16
- Romz
Re : Déclarer une fonction retournant un tableau à 2 dim en C
Ca compile, avec des warnings.
Je vais voir à l'exécution si ça donne ce que j'attends...
Hors ligne
#9 Le 27/07/2007, à 15:19
- AuraHxC
Re : Déclarer une fonction retournant un tableau à 2 dim en C
Bon disons que tu veux retourner un tableau en deux dimensions qui contient des int :
#include <stdio.h>
#include <stdlib.h>
int** fonctionTableau(int a) {
int** montab = (int**)malloc(3*sizeof(int*)); //allocation des colonnes
int i,j;
for(i=0;i<3;i++)
montab[i] = (int*) malloc(6*sizeof(int)); //allocation du nombre de cases par colonnes
//je vais remplir mon tableau avec le nombre a
for(i=0;i<3;i++)
for(j=0;j<6;j++)
montab[i][j] = a;
return montab;
}
int main(void) {
int** tableau = fonctionTableau(25);
int i,j;
for(i=0;i<3;i++) {
for(j=0;j<6;j++) {
printf("%d",tableau[i][j]);
}
printf("\n");
}
return 0;
}
ca me retourne :
carole@carole-computer:~/Desktop$ gcc -Wall test.c -o test
carole@carole-computer:~/Desktop$ ./test
252525252525
252525252525
252525252525
carole@carole-computer:~/Desktop$
Je fais juste un tableau [3][6] que je remplis de 25;
EDIT : j'ai fait ca vite fait à l'arrache donc c'est juste pour le principe
Dernière modification par AuraHxC (Le 27/07/2007, à 15:20)
Hors ligne
#10 Le 27/07/2007, à 15:24
- qqun
Re : Déclarer une fonction retournant un tableau à 2 dim en C
ou sinon en gros un truc du style .
#include <stdio.h>
#define NBPIECES 16
int i,j;
int** testtab(int ** test){
int pieces[NBPIECES][4]= {
{0, 4, 1, 0},{0, 0, 1, 4}, {4, 0, 0, 4}, {1, 0, 0, 1},
{3, 2, 3, 3}, {2, 2, 2, 3}, {2, 2, 3, 3}, {2, 2, 3, 3},
{1, 2, 1, 0}, {4, 2, 4, 0}, {4, 2, 1, 0}, {1, 2, 4, 0},
{1, 3, 1, 0}, {4, 3, 4, 0}, {1, 3, 4, 0}, {4, 3, 1, 0}
};
for(i=0;i<NBPIECES;i++)
for(j=0;j<4;j++)
{
printf("t[%d][%d]=%d ",i,j,pieces[i][j]);
test[i][j]=pieces[i][j];
}
return test;
}
int main (void)
{
int **truc;
*truc=malloc(sizeof(int*)*NBPIECES);
for(i=0;i<NBPIECES;i++)
truc[i]=malloc(sizeof(int)*4);
truc=testtab(truc);
printf("\n");
for(i=0;i<NBPIECES;i++)
for(j=0;j<4;j++)
printf("t[%d][%d]=%d ",i,j,truc[i][j]);
printf("\n");
return 0;
}
#11 Le 28/07/2007, à 21:05
- Romz
Re : Déclarer une fonction retournant un tableau à 2 dim en C
D'accord, je vois le principe.
Merci tout le monde
Hors ligne