une fonction qui retourne un tableau .. [C] - Programmation
Marsh Posté le 15-01-2002 à 17:28:01
Ah ca c'est pas possible en C. En gros tu veux pouvoir créer une variable de type tableau d'entier pendant l'execution du programme. En C ce n'est pas possible je crois.
Par contre en javascript tu peux !!!
Marsh Posté le 15-01-2002 à 17:35:04
Ok merci de ta reponse
Bon , du coup , je veux faire plutôt ca :
int * creer_tableau ( )
{
int tab[ligne][colonne];
// initialisation du tableau
}
Comment recupérer mon tableau ?
Je veux dire dans main ( ), si j'ai :
------
main ()
{
xxx = creer_tableau();
}
------
que dois-je declarer pour xxx ? de manière à recupere un tableau ?
merci d'avance
Marsh Posté le 15-01-2002 à 17:44:12
thadawg a écrit a écrit : Ok merci de ta reponse Bon , du coup , je veux faire plutôt ca : int * creer_tableau ( ) { int tab[ligne][colonne]; // initialisation du tableau } |
Marchera pas !
tu peut pas créer de tableau avec des variables de cette façon: ligne et colone doivent être des constantes !
thadawg a écrit a écrit : Comment recupérer mon tableau ? Je veux dire dans main ( ), si j'ai : ------ main () { xxx = creer_tableau(); } ------ |
au mieux, tu peux récupérer un pointeur vers ton tableau (ce qui, en passant, est la même chose qu'un tableau, la simplicité d'écriture en moins !
Marsh Posté le 15-01-2002 à 18:02:52
Merci pour vos reponses
Une fois "int* tableau= creer_tableau() " écrit, comment je récupère les valeurs qui sont dans tableau ?
Marsh Posté le 15-01-2002 à 18:04:38
tableau[i]
Marsh Posté le 15-01-2002 à 18:21:46
VisualC++ a écrit a écrit : tableau[i] |
non !
La je pars, g vraiement pas le temps de répondre... demain.
[edtdd]--Message édité par El_Gringo--[/edtdd]
Marsh Posté le 15-01-2002 à 18:24:27
tu peux faire une bidouille proche de ce que tu souhaites:
Code :
|
ou meme (pareil ...)
Code :
|
Le probleme, c'est qu'il faut penser à libérer tout ça après.
"int * creer_tableau ( )
{
int tab[ligne][colonne];
// initialisation du tableau
}"
ce code est faux pour 2 raisons :
-pas d'initialisation dynamique possible : int tab[<variable>]; n'est pas possible
-tu renvois un tableau créé localement = qui n'existera plus des que tu quitteras ta fonction.
Marsh Posté le 15-01-2002 à 18:26:18
Citation : tu renvois un tableau créé localement = qui n'existera plus des que tu quitteras ta fonction. |
Merci bcp , c'était exactement ca mon problème !
Marsh Posté le 15-01-2002 à 21:10:05
Merci encore, mais un pb subsiste : j'ai du mal a mettre le tableau ainsi crée en argument d'une autre fonction, ca donne :
--------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char lireligne(char s[])
{
int c,i;
i=0;
printf("saisir la ligne\n" );
while ((c=getchar())!='\n'
s[i++]=c;
if (c == '\n'
s[i++] = c;
s[i] = '\0';
}
/*************************************************
*****************************/
int * creer_tableau(int * Tab , int Lignes , int Colonnes)
{
return realloc(Tab, Lignes * Colonnes * sizeof(int));
}
/*************************************************
*****************************/
void recherche_fonction( char str[], char str2[], int k, int * tab[][])
{
int i=0,j=0,m=0,n=0;
int * MonTableau = NULL;
int nb_lignes = 1;
int nb_colonnes = 4;
char * pch;
MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
pch=strstr(str,str2);
printf("%s\n",pch);
for (n = 0; n < nb_colonnes; n++)
{
if (pch==NULL) {
MonTableau[n * nb_colonnes + k] = -1;
}
else {
MonTableau[k * nb_colonnes + n] = pch-str+1;
pch = strstr (pch+3,str2);
nb_lignes++;
printf("on augmente" );
MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
}
}
/* impression tableau */
for (j = 0; i < nb_colonnes; j++)
{
for (i = 0; i < nb_lignes ; i++)
{
printf("%d\t",MonTableau[i * nb_colonnes + j]);
}
}
/* fin impression tableau */
}
/******************************************************************************/
void main(void)
{
char ligne[100];
char ligne2[3];
int * MonTableau = NULL;
int i=0,j=0;
int n;
lireligne(ligne);
recherche_fonction(ligne , "cos" , 0 , MonTableau);
//MonTableau[3 * nb_colonnes + 5] = 20; /* pour acceder à MonTableau[3][5] */
//nb_lignes = 30;
//MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
/* nouvelle taille 30 * 20 - Attention à ne pas toucher au nombre de colonnes (la largeur)*/
}
--------------------
Je comprends pas pourquoi ca me sort un tableau infini ?
Marsh Posté le 15-01-2002 à 17:23:55
Comment créer une focntion qui aurait en argument le nom du tableau souhaité, ainsi que la taille de celui-ci et qui retournerait un tableau, tel que :
int * creer_tableau ( nom_du_tableau , nb_ligne , nb_colonne )
comment recuperer le tableau qui sort de la fonction ?
merci d'avance
---------------
Wigga with Attitude.