Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1308 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Renvoyer l'adresse d'un tableau en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Renvoyer l'adresse d'un tableau en C

n°2141630
Maxwell166​4
Posté le 09-05-2012 à 17:53:45  profilanswer
 

Salut à tous,
 
Après plusieurs essais et de recherche sur le net, je fais appel à vous...
 
Je suis en train de coder un programme ayant plusieurs modules. A un moment donné, j'ai besoin d'utiliser un tableau d'unsigned char de taille fixe déclarer dans le main.c dans un autre module. Les solutions non-élégantes sont de déclarer ce tableau en tant qu'extern ou alors d'envoyer le tableau complet en argument... ce que je ne souhaite pas faire si possible.
 
Du coup, j'aimerais faire une fonction permettant de me renvoyer l'adresse d'un élément du tableau mais je n'y arrive pas... pouvez-vous m'aider dans la syntaxe SVP? J'ai essayé pas mal de choses, mais toujours des erreurs.
 
Je suis conscient que ce que je dis là n'est pas très clair, alors pour essayer de clarifier tout ceci, voici à quoi ceci devrait ressembler :
 
unsigned char maFonction(unsigned char elementDuTableauAPointer)
{
     return &tableau[elementDuTableauAPointer]
}
 
tableau étant un tableau d'unsigned char défini en tant que variable globale dans le module. J'ai fait plusieurs essais avec des astérix et autre mais jamais concluant. Quelqu'un pourrait-il m'aider ou alors je vous explique mal mon problème? Merci d'avance!


---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
mood
Publicité
Posté le 09-05-2012 à 17:53:45  profilanswer
 

n°2141647
tpierron
Posté le 09-05-2012 à 18:47:00  profilanswer
 

Bah, euh, ce n'est vraiment pas compliqué. Un truc du genre devrait faire l'affaire :
 

Code :
  1. unsigned char * maFonction(unsigned char elementDuTableauAPointer)
  2. {
  3.     /* unsigned char en indice = casse gueule */
  4.     return &tableau[elementDuTableauAPointer];
  5. }


 
Ou plus simplement :

Code :
  1. unsigned char * maFonction(int elementDuTableauAPointer)
  2. {
  3.     return tableau + elementDuTableauAPointer;
  4. }


 

Maxwell1664 a écrit :

J'ai fait plusieurs essais avec des astérix et autre mais jamais concluant.


Euh, ne le prends pas mal, mais un language de programmation, surtout le C, ce n'est pas un truc ou tu jettes le code à l'écran en espérant que ça tombe en marche tout seul. Tu devrais quand même étudier un minimum les bases là...

n°2141658
breizhbugs
Posté le 09-05-2012 à 20:40:06  profilanswer
 

Ca sert à quoi de faire une fonction pour ça?
Il ne faut pas plutôt chercher 'elementDuTableauAPointer' dans le tableau et pointer à son indice?
genre:

Code :
  1. unsigned char *maFonction(unsigned char *tableau, unsigned int taille, unsigned char elementDuTableauAPointer)
  2. {
  3.     unsigned char *res = NULL;
  4.     unsigned int indice = 0;
  5.     while(indice < taille && tableau[indice] != elementDuTableauAPointer)
  6.            indice++;
  7.     if(tableau[indice] == elementDuTableauAPointer)
  8.            res = &tableau[indice];
  9.     return res;
  10. }


?

Message cité 2 fois
Message édité par breizhbugs le 09-05-2012 à 20:41:39

---------------
Seul Google le sait...
n°2141660
Maxwell166​4
Posté le 09-05-2012 à 20:41:55  profilanswer
 

Salut! Merci pour ta réponse! Je testerai tout ça demain au boulot!
 
Pas de souci, je ne le prends pas mal du tout! Juste que j'ai fait des essais de manière cohérente au début et après j'ai essayé diverses possibilité histoire de voir les différents messages d'erreur! J'ai fait tout ceci en fin d'après-midi, du coup j'étais fatigué! Merci bien en tout cas! Il me semble que j'ai testé ce que tu me proposes sans succès, mais je me trompe peut-être! Je test tout ça demain matin et je te redis! Merci du coup de main en tout cas!


---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
n°2141661
Maxwell166​4
Posté le 09-05-2012 à 20:44:57  profilanswer
 

breizhbugs a écrit :

Ca sert à quoi de faire une fonction pour ça?
Il ne faut pas plutôt chercher 'elementDuTableauAPointer' dans le tableau et pointer à son indice?
genre:

Code :
  1. unsigned char *maFonction(unsigned char *tableau, unsigned int taille, unsigned char elementDuTableauAPointer)
  2. {
  3.     unsigned char *res = NULL;
  4.     unsigned int indice = 0;
  5.     while(indice < taille && tableau[indice] != elementDuTableauAPointer)
  6.            indice++;
  7.     if(tableau[indice] == elementDuTableauAPointer)
  8.            res = &tableau[indice];
  9.     return res;
  10. }


?


 
C'est histoire de pouvoir communiquer les valeurs entre différents modules sans envoyer tout le tableau ou sans déclarer le tableau en tant qu'"extern". Je regarderai demain ce que me propose tpierron et ensuite je regarderai aussi ton histoire, un peu fatigué ce soir pour voir ce que tu me proposes! Après avoir fait du C pendant 8h et que ça fait des semaines que ça dure :D ! Je regarde tout ça demain, merci bien en tout cas!


---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
n°2141674
tpierron
Posté le 09-05-2012 à 22:31:11  profilanswer
 

breizhbugs a écrit :

Ca sert à quoi de faire une fonction pour ça?


Accessoirement, ça permettrait de (légèrement) changer la représentation du type (genre une liste chainée de table fixe pour gérer le retaillage dynamique, sans réallocation complète du bloc). Cela dit avec un indice en "unsigned char", c'est mal barré... et de toute façon, faudra faire gaffe au chevauchement de bloc mémoire, mais ça reste une technique intéressante (peut-être pas sur des blocs aussi petit cela dit).

n°2141704
Maxwell166​4
Posté le 10-05-2012 à 09:06:31  profilanswer
 

Mais pourquoi ce n'est pas bien d'avoir un indice en unsigned char?

 

EDIT : Je viens d'essayer ce que tu me propose tpierron et en fait c'est bien ce que j'avais faire hier et j'ai une erreur genre :

 

#161 declaration is incompatible with previous "maFonction" -> à la ligne "unsigned char * maFonction(unsigned char elementDuTableauAPointer)"
#515 a value of type "int" cannot be assigned to an entity of type "unsigned char *"

 

Donc voilà, c'est pour ceci que je vous demande de l'aide... je vais voir ce que me propose breizhbugs là...

 

EDIT2 : Arf! Désolé, je viens de voir que dans mon code de test, j'avais oublié d'inclure le fichier .h ... du coup il n'était pas content... ça m'apprendre à jouer à Skyrim jusqu'à 1h du mat'! Merci beaucoup à vous deux! Maintenant que ça fonctionne dans mon code d'essai, je vais voir si ça joue dans mon projet et je vous tiens au courant! Bon là j'ai mis des int partout au lieu d'unsigned char, mais mon tableau est de type unsigned char en fait donc voilà! Et de taille 15 sauf erreur et également de taille fixe!


Message édité par Maxwell1664 le 10-05-2012 à 09:23:28

---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
n°2141734
breizhbugs
Posté le 10-05-2012 à 11:01:38  profilanswer
 

Merci pour les explications.


---------------
Seul Google le sait...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Renvoyer l'adresse d'un tableau en C

 

Sujets relatifs
[C] random sur un enumDifférence d'affichage d'un tableau dans une div avec IE et Safari
[C] fonctions imbriquées, je m'y perds [résolu]Récupérer adresse ip locale en Javascript ?
Macro tableau croisé dynamique[C] SDL avec combo BlitSurface() + Flip()
[C# .net] Navigation vers un TAB précis d'un FORM.fonction qui transforme une matrice en vecteur en langage C
Calcul de la norme d'un vecteur généré de façon aléatoire en langage C[boucle PHP remplissage tableau
Plus de sujets relatifs à : Renvoyer l'adresse d'un tableau en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR