2012-07-25 4 views
4

J'ai essayé de passer un tableau multidimensionnel, d'une taille inconnue, à une fonction, et jusqu'à présent ont pas eu de chance, lorsque le tableau est déclaré, ses dimensions sont variables:Passer un tableau multidimensionnel à une fonction (C++)?

double a[b][b]; 

En ce qui concerne comme je peux le dire, je dois donner la valeur de b quand je déclare la fonction, un peut être inconnu. J'ai essayé de déclarer b comme une variable globale, mais il dit ensuite que cela doit être une constante.

-à-dire:

int b; 

double myfunction(array[][b]) 
{ 
} 

int main() 
{ 
int a; 
double c; 
double myarray[a][b]; 

c=myfunction(myarray); 

return 0; 
} 

Est-il possible que cela fonctionne?

+1

Pas très jolie, mais pouvez-vous pas seulement passer dans le pointeur vers le premier élément? – Chris

+2

'std :: vector' rend la vie tellement plus facile. – chris

+3

Si les dimensions sont variables, utilisez 'std :: vector' ou' boost :: multiarray'. –

Répondre

-1
void procedure (int myarray[][3][4]) 

Plus sur cette here

+2

Je pense que c'est un tableau à 3 dimensions au lieu de 2, ou bien vous avez trouvé une syntaxe que je n'ai jamais vue auparavant [ce qui est certes possible! :)] –

+1

Voir le commentaire de Griwes sur l'autre réponse. Un meilleur lien serait [cette question] (http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c). – chris

4

passe par valeur:

double myfunction(double (*array)[b]) // you still need to tell b 

passe par ref:

double myfunction(int (&myarray)[a][b]); // you still need to tell a and b 

chemin Modèle:

template<int a, int b> double myfunction(int (&myarray)[a][b]); // auto deduction 
1

si vous voulez passer un tableau de taille inconnue vous pouvez déclarer un tableau Heap comme celui-ci

//Create your pointer 
int **p; 
//Assign first dimension 
p = new int*[N]; 
//Assign second dimension 
for(int i = 0; i < N; i++) 
p[i] = new int[M]; 


than you can declare a function like that: 
double myFunc (**array); 
Questions connexes