[C] Tableau en paramètre + return

Résolu
sp00m` -  
 sp00m` -
Bonjour,

Nous souhaitons passer un tableau à une fonction qui le modifie et le retourne. Est-ce possible en C ?

typedef struct _Paquet
{
	int dest;
	int source;
	int etat;
	char* message;
} Paquet;

int main(void)
{
	Paquet paquet[3];
	paquet = CreerPaquet(paquet, 3);
	return(0);
}

Paquet CreerPaquet(Paquet paquet[], N)
{
	int i;
	for(i=0; i<N; i++)
	{
		paquet[i].dest = 0;
		paquet[i].source = 0;
		paquet[i].etat = 0;
		paquet[i].message = "";
	}
	return paquet;
}


Merci de votre réponse,

sp00m`
A voir également:

4 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Oui, aucun soucis. Tu n'as pas besoin de retourner le tableau par contre. Il est passé en paramètre par adresse et non par copie. Donc lorsque tu le modifies depuis CreerPaquet(), il ne modifie pas une copie, il modifie le vrai, celui qui a été passé en paramètres:

typedef struct _Paquet
{
	int dest;
	int source;
	int etat;
	char* message;
} Paquet;

void CreerPaquet(Paquet paquet[], int N)
{
	int i;

	for(i = 0; i < N; i++)
	{
		paquet[i].dest = 0;
		paquet[i].source = 0;
		paquet[i].etat = 0;
		paquet[i].message = "";
	}
}

int main(void)
{
	Paquet paquet[3];

	CreerPaquet(paquet, 3);

	return 0;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,

Non ce n'est pas possible de renvoyer un tableau. En fait tu renverras un pointeur. D'ailleurs ce n'est pas possible non plus d'envoyer un tableau en argument.

De ce fait, comme le dit kilian, la modification de paquet dans ta fonction modifiera bel et bien le tableau dans ta fonction appelante.

Cdlt,
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Voilà.

Pour compléter ce que dit fiddy, en fait tu peux passer le tableau en paramètres, le code d'au dessus marche. Mais c'est un faux semblant, en réalité tu ne passes pas le tableau mais son adresse.

Ce code:
void CreerPaquet(Paquet paquet[], int N)

est équivalent à celui-ci (syntaxe plus traditionelle):
void CreerPaquet(Paquet *paquet, int N)
0
sp00m`
 
Merci à vous, mon programme marche à la perfection ;)

A charge de revanche,

sp00m`
0