[C/C++] pointeur tableau multidimension

Le côté programmation du développement d'un jeu vidéo.

pointeur tableau multidimension

Messagepar monnier.an » 06 Juil 2008, 08:28

Voila je voudrai savoir comment faire pour passer un tableau a deux dimension a une fonction. J'ai réussi a le faire pour un tableau a une dimension mais pas a deux. Merci d'avance (je doit passer un tableau a deux dimension de pointeur sur BITMAP mais c'est la même chose que pour un int.)
Et personellement je n'aime pas la formulation void mafonction(int tableau[][]). Merci d'avance pour votre réponse.
"The value of a question doesn't depend on its quality but on the value of the answer." A.J.

"You don't sculp this stone to make a cube. You sculpt it to become the beginning of a temple." A.J.
Avatar de l’utilisateur
monnier.an
Hello World, I'm new !
 
Messages: 170
Inscription: 23 Aoû 2006, 12:42
Localisation: Brest

Messagepar Thelvyn » 06 Juil 2008, 11:21

Salut,

alors voici une maniere de passer un tableau à 2 dimensions ( alloué dynamiquement ) à une fonction :

Code: Tout sélectionner
#include <stdio.h>
#include <stdlib.h>

void foo( int h, int w, int** tab ){
   int i, j;
   for( i = 0; i < h; i++ )
      for( j = 0; j < w; j++ )
         printf( "tab[%d][%d] = %d\n", i, j, tab[i][j] );
}

int** alloc_table(int w, int h){
   int i;
   int** tab = (int**)malloc( sizeof(int*) * w );
      for( i = 0; i < h; i++)
         tab[i] = (int*)malloc( sizeof(int) * w );
   return tab;
}

void free_table(int h, int** tab){
   int i;
   for( i = 0; i < h; i++ )
      free( tab[i] );
   free(tab);
}

#define WIDTH    16
#define HEIGHT    16
int main( int argc, char** argv ){
   int i, j;   
   int** tab = alloc_table(WIDTH, HEIGHT);
   
   for( i = 0; i < HEIGHT; i++ )
      for( j = 0; j < WIDTH; j++ )
         tab[i][j] = i * WIDTH + j;
   
   foo( HEIGHT, WIDTH, tab );
   
   free_table(HEIGHT, tab);      
   return 0;   
}


je n'utilise jamais les tableaux à plusieurs dimensions c'est trop bordelique :D
tu peux faire la meme chose ( d'ailleurs c'est ce qu'on fait en général ) en utilisant un tableau à une dimension, voici un exemple qui fait la même chose:


Code: Tout sélectionner
#include <stdio.h>
#include <stdlib.h>

void foo( int h, int w, int* tab){
   int i,j;
   for( i = 0; i < h; i++ )
      for( j = 0; j < w; j++ )
         printf( "tab[%d][%d] = %d\n", i, j, tab[i*w + j] );
}

int main( int argc, char** argv ){
   int i;
   int tab[256];   
   for( i = 0; i < 256; i++ )
      tab[i] = i;
   foo(16, 16, tab);   
}


voila j'espère t'avoir aidé :)
CoDito, ergo sum...
Avatar de l’utilisateur
Thelvyn
 
Messages: 488
Inscription: 31 Mai 2005, 20:40

ou pas

Messagepar olympi » 06 Juil 2008, 11:33

Thelvyn a écrit:Salut,
alors voici une maniere de passer un tableau à 2 dimensions ( alloué dynamiquement ) à une fonction :


Ça marche pour tout les tableaux multidimensionnelles, dynamique ou non.
www.indedependant.info actualités et critiques du jeu vidéo indépendant.
Clavier bépo : « soyez bépoète des mots » :)
Bruit d'une bulle qui remonte à la surface d'un liquide visqueux.
Avatar de l’utilisateur
olympi
Hello World, I'm new !
 
Messages: 132
Inscription: 10 Avr 2005, 20:21
Localisation: Laval

Messagepar Thelvyn » 06 Juil 2008, 12:08

olympi a écrit:Ça marche pour tout les tableaux multidimensionnelles, dynamique ou non.


tout dépend si t'as un compilo facho ou pas ...
CoDito, ergo sum...
Avatar de l’utilisateur
Thelvyn
 
Messages: 488
Inscription: 31 Mai 2005, 20:40

Messagepar monnier.an » 06 Juil 2008, 20:12

Oui merci beaucoup tu me retire une épine du pied. Bien évidement j'avai penser a la multiplication pour obtenir un tableau a une dimension. Mais j'aime beaucoup les multidimension car ca me permet de les visualiser très rapidement.
Merci encore.
"The value of a question doesn't depend on its quality but on the value of the answer." A.J.

"You don't sculp this stone to make a cube. You sculpt it to become the beginning of a temple." A.J.
Avatar de l’utilisateur
monnier.an
Hello World, I'm new !
 
Messages: 170
Inscription: 23 Aoû 2006, 12:42
Localisation: Brest


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

cron