Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. cool

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 wink

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 tongue

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 cool

Hors ligne