Création d une fonction cree_tab() retournant un tableau t[]
void loop() {
delay(500);
int tab[3];// = cree_tab();
tab[0,2] = cree_tab();//ramène les 3 valeurs du return pour les mettre ds les cases 0 à 2 de tab[]
for(int i = 0; i<3; i++){
Serial.print("tab: ");Serial.println(tab[i]);
}
}
int cree_tab(){
int t[3] = {1,2,3};
for(int i = 0; i<3; i++){
Serial.print("t: ");Serial.println(t[i]);
}
return t[0,2];//retourne les valeurs des cases 0 à 2 de t[]
}
Est ce que mon code parait cohérent pour créer la fonction cree_tab();
La console me renvoie:
t: 1
t: 2
t: 3
tab: 1
tab: 2
tab: 3
Ca me parait juste Par contre si je supprime Serial.print("t: ");Serial.println(t*);* La console renvoie : tab: 1536 tab: -2855 tab: 3 Pourquoi qu en supprimant un Serial.print le résultat change et donne n importe quoi sauf le 3 qui est juste Merci pour votre aide
Elle est censé retourner un entier, on ne peut pas lui faire retourner un tableau! C'est drôle que le compilateur le laisse passer.
A priori elle a le droit de retourner n'importe quoi. Sur les 6 octets passés, il y en a 2 qui doivent passer, pas les autres.
Maintenant il est possible que le compilateur pousse les trois bonnes valeurs dans la pile pour le println et que de l'autre côté tu dépiles 4 octets en plus. Et que par hasard ce soit les bonnes
salut , je pense que tu peux renvoyer un tableau de int avec cette fonction , un tableau n ' est pas un type de variable , donc tu peux renvoyer un tableau de n ' importe quoi ( ici : int ).
en faisant :
bool ma fonction () {
bool tableau_bool [3] = {true,true,true};
return tableau_bool ;
}
Ce n'est pas un hasard car j ai changé les valeurs et la logique reste la même
Vous dites que la fonction est censée retourner un entier oui mais alors comment on fait pour retourner un tableau d'entiers?
nono401:
Est ce que mon code parait cohérent pour créer la fonction cree_tab();
Bonjour,
Non ce n'est pas correct.
tab[0,2] ne représente pas tout le tableau, mais est équivalent à tab[2]. Donc seul le troisième élément du tableau est affecté.
Quand on veut utiliser un tableau ou retourner un tableau il faut passer son adresse en paramètre, ce qui en C est le nom du tableau.
void loop() {
delay(500);
int tab[3];// = cree_tab();
cree_tab(tab); //ramène les 3 valeurs du return pour les mettre ds les cases 0 à 2 de tab[]
for (int i = 0; i < 3; i++) {
Serial.print("tab: "); Serial.println(tab[i]);
}
}
void cree_tab(int tableau[]) {
int t[3] = {1, 2, 3};
for (int i = 0; i < 3; i++) {
Serial.print("t: "); Serial.println(t[i]);
tableau[i]=t[i];
}
}
Dans ce code, il n'y a pas de pointeur (du moins pas de pointeur explicite).
Merci pour votre réponse mais j ai fait des essais avec return t[0,1] et la fonction retourne que 2 valeurs
Mais ma grosse question est pourquoi la presence ou pas d'un print console change les valeurs ds le tableau tab
delay(500);
int tab[3];// = cree_tab();
cree_tab(tab); //ramène les 3 valeurs du return pour les mettre ds les cases 0 à 2 de tab[]
for (int i = 0; i < 3; i++) {
Serial.print("tab: "); Serial.println(tab[i]);
}
}
void cree_tab(int tableau[]) {
int t[3] = {1, 2, 3};
for (int i = 0; i < 3; i++) {
Serial.print("t: "); Serial.println(t[i]);
tableau[i]=t[i];
}
}
Dans ce code, il n'y a pas de pointeur (du moins pas de pointeur explicite).
oui , mais il n ' y a pas de return dans la fonction , je ne connais pas cette façon de faire .
Merci pour votre réponse mais j ai fait des essais avec return t[0,1] et la fonction retourne que 2 valeurs
Mais ma grosse question est pourquoi la presence ou pas d'un print console change les valeurs ds le tableau tab
ca c ' est la portée des variables , les noms sont similaires , mais pas le contenu des variables .
Merci pour le code mais c est pas ce que je recherche Vous envoyez un tableau a la fonction alors que moi je veux créer un tableau dans la fonction et le retourner dans loop.
Avec votre fonction vous ne retournez plus rien. Il n y a pas de return
Peut etre que je n ai pas tout compris......
nono401:
Merci pour le code mais c est pas ce que je recherche Vous envoyez un tableau a la fonction alors que moi je veux créer un tableau dans la fonction et le retourner dans loop.
C'est exactement ce que fais le code. Le fonction retourne les valeurs directement dans le tableau passé en paramètre.
Testes le code que je t'ai proposé.
tu peux aussi faire une declaration de tableau en global , le transmettre a une fonction , lui faire modifier les valeurs du tableau , et c ' est tout
ensuite une lecture des elements est suffisante a partir de n ' importe ou , car ton tableau est global , hors de loop ou de setup , si je ne dis pas de betise , habituellement je fais comme ca , je poste le code des que je l ' ai retrouvé .
il me semble que c ' est ce que kamill a deja proposé d' ailleurs .
et il n ' y a que ces 2 solutions a ma connaissance .