Les pointeurs, même plus peur ... ou presque !! [Forums - Langage C]
Les pointeurs, même plus peur ... ou presque !! [Forums - Langage C]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes





Les pointeurs, même plus peur ... ou presque !!
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Bon maintenant s'en est de trop.

Voici une fonction issue de MAXIM qui ne fonctionne pas dans mon programme :

//---------------------------------------------------------------------------
--
// Write a block 1-Wire data bytes and return the sampled result in the same
// buffer.
//
void OWBlock(unsigned char *dataint data_len)
{
int loop;
for (
loop 0loop data_lenloop++)
{
data[loop] = OWTouchByte(data[loop]);
}
}


Que j'ai transformé comme ceci :
void OWBlock(u8 *pu8dataU8 u8data_len)
{
u8 u8loop;
for (
u8loop 0u8loop data_lenu8loop++)
{
data[u8loop] = OWTouchByte(data[u8loop]);
}
}


Bon déjà ce code marche pas chez moi.

Ensuiste, comment ce sert-on de ces arguments ? Enfin je veux dire, le pointeur *pu8data ?

C'est marrant parce que, ici, on déclare un pointer, pour une taille à définir, et ça se transforme en tableau dans la fonction avec data[u8loop] = OWTouchByte(data[u8loop]);
J'imagine qu'un pointeur pour 8 valeurs, est équivalent à un tableau déclaré de 8 valeurs ...

Là, je nage ...

Posté le : 15/03/2016 16:46
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Les pointeurs, même plus peur ... ou presque !!
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Citation :
C'est marrant parce que, ici, on déclare un pointer, pour une taille à définir, et ça se transforme en tableau dans la fonction

Je vais essayer de faire simple:

C ne sait passer des paramètres que par VALEUR, c'est à dire en effectuant une copie de la valeur des paramètres appelants et utiliser cette copie dans la fonction.
Lorsqu'on veut passer un tableau en paramètre, on ne copie pas toutes les données du tableau mais seulement l'adresse de début du tableau, d'où la notion de pointeur puisqu'un pointeur correspond normalement à une adresse.

Pour en revenir à ton exemple, dans void OWBlock(u8 *pu8data, U8 u8data_len), pu8data est égale à l'adresse de ton tableau. A une subtilité près,
void OWBlock(u8 pu8data[], U8 u8data_len) aurait pu être également utilisé avec un comportement identique.

Ton code ne peut pas compiler car ton tableau s'appelle pu8data dans la liste de paramètres et data dans le corps de ta fonction, qu'il faudrait donc réécrire ainsi:
void OWBlock(u8 *pu8dataU8 u8data_len
{
   
u8 u8loop;
   for (
u8loop 0u8loop data_lenu8loop++) 
   { 
        
pu8data[u8loop] = OWTouchBytepu8data[u8loop]);
   } 
}

Posté le : 15/03/2016 18:01
Transférer la contribution vers d'autres applications Transférer


Re: Les pointeurs, même plus peur ... ou presque !!
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Merci Jacques, je comprend mieux.

Mais du coup, en argument lors de l'appel de cette fonction, quel type de variable je lui passe à *pu8data ? Actuellement, j'ai une variable tableau du type U8 maVariable[8], il faut bien que je déclare quelque part que j'ai besoin d'allouer 8 octets ?

Posté le : 15/03/2016 20:41

Edité par dinastar sur 15/03/2016 23:09:44
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Les pointeurs, même plus peur ... ou presque !!
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Comme ceci par exemple:

int main()
{
   
U8 maVariable[8];
   
OWBlock(maVariable8)
  
//  etc.
   
return 0;
}

Posté le : 15/03/2016 23:12
Transférer la contribution vers d'autres applications Transférer


Re: Les pointeurs, même plus peur ... ou presque !!
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Ok c'est pigé ! Je vais voir et réécrire mes fonctions.

Merci encore !

Posté le : 16/03/2016 00:30
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Les pointeurs, même plus peur ... ou presque !! [Forums - Langage C]