bonjour,

en essayant de compacter mon code je suis arriver a une solution qui fonctionne mais je ne comprend pas bien pourquoi, bizarre direz vous.

voila j'utilise une procedure qui convertit un code decimale (ici unsigned short donc 16 bit) en code ascii, je passe en argument la valeur decimale, la procedure crée un tableau de 3 valeur contenant les code ascii pour centaine, dizaine et unité.
la procedure renvoi alors l'adresse du tableau.

voici cette procedure:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
 
//procedure qui renvoi un pointeur sur un tableau
 
unsigned char* conversion_short_Ascii_C_D_U (unsigned short valeur_decimale) {
 
unsigned char tbl[3];
unsigned char centaine;
unsigned char dizaine;
unsigned char unite;
 
  	centaine = valeur_decimale / 100;
	dizaine = (valeur_decimale % 100 ) / 10;
	unite = (valeur_decimale % 100 ) % 10;
 
	centaine = conv_Ascii (centaine);
	dizaine = conv_Ascii (dizaine);
	unite = conv_Ascii (unite);
 
	if (centaine == '0'){
		centaine = ' ';
		if (dizaine == '0') {
			dizaine = ' ';
		}
	}	
 
	tbl[0] = centaine;
	tbl[1] = dizaine;
	tbl[2] = unite;
 
	return & tbl;
}
dans un premier temps j'utilisait un pointeur pour recuperer ces trois valeur, comme ceci.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
unsigned char *pt_sur_char;
 
   	pt_sur_char = conversion_short_Ascii_C_D_U (123);
	tbl_buffer_EA [0] = *pt_sur_char ; //centaine
             pt_sur_char ++;
	tbl_buffer_EA [1] = *pt_sur_char ; //dizaine
             pt_sur_char ++;
	tbl_buffer_EA [2] = *pt_sur_char ; //unité
mais en testant deux trois truc, j'ai vu que je pouvais aussi l'ecrire comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
unsigned char *pt_sur_char;
 
   	pt_sur_char = conversion_short_Ascii_C_D_U (123);
	tbl_buffer_EA [0] = pt_sur_char[0] ; //centaine
	tbl_buffer_EA [1] = pt_sur_char[1] ; //dizaine
	tbl_buffer_EA [2] = pt_sur_char[2] ; //unité
les resulats sont bon mais est ce correcte d'utiliser cette syntaxe.

je ne comprend pas pourquoi j'ai une erreur de compilation si je definit
unsigned char pt_sur_char [3]
comme tableau au lieu d'un pointeur comme ceci:
unsigned char *pt_sur_char;

quand je fais
pt_sur_char = conversion_short_Ascii_C_D_U (123);
je renvoi bien une adresse à un tableau mais cela ne veux pas se compiler.

pouvez vous m'eclairer la dessus?

merci de votre aide.