0
votes

En C, est-il un moyen de déclarer une instance d'une structure qui est toujours traitée par un pointeur particulier?

Je vais commencer par cataloguer ce que je sais de distinguer cela de ce que je veux:

  1. Je peux déclarer un "modèle" pour une structure à travers `Typeft struct ASTUCT ... ' LI>
  2. Je peux déclarer une instance d'une structure, dans un stockage global ou local, via astruct muntructeur; code> li>
  3. Je peux déclarer un pointeur à une structure via astruct * pmystructre; code> puis définissez la valeur de ce pointeur sur une instance via PMYStruct = & muntruct; li> li> li> ol>

    Que je voudrais, c'est faire en quelque sorte le contraire de n ° 3: J'aimerais déclarer une instance d'une structure définie pour être traitée par un pointeur particulier ... quelque chose d'appréhension à : P>

    DCL PTHESTRUCT POINTER;
    DCL 1 THESTRUCT BASED(PTHESTRUCT),
          3 ... (rest of the structure) ;
    


5 commentaires

Utilisez et pthestruct


Je suis confondu par votre PthStract -> ThestructDactDaTaTem . Il serait sûrement pthestruc-> strucdataitem ?


Je ne peux pas penser à un moyen d'initialiser par magie un pointeur de la façon dont vous voulez. Il suffit de faire des choses le moyen, puisque vous écrivez le code C.


Scott Fagen, pourquoi ne pas utiliser pthestruct -> ?


Je comprends la distinction entre un Typedef struct et un struct . Je cherche à voir si la fonctionnalité, basée sur (ptr-expression) , disponible dans PL / I (et Variantes), est dans C. À partir des réponses et des commentaires, il semblerait de ne pas être une caractéristique de la langue.


3 Réponses :


-1
votes

Voulez-vous dire?

  typedef struct
    {
     int a;
     int b;
    } struct_t;

    struct_t myStruct;
    struct_t* pStruct;

   pStruct = &myStruct;
   pStruct->a =5;


1 commentaires

Non, j'aimerais que le pointeur est en quelque sorte connecté à la structure déclarée. De sorte que si je change le pointeur, la mémoire référencée par des références à la structure est modifiée. Si j'emprunte la syntaxe de PL / I: Typedef Astruct {....} ASTRUCT * // Créer le programme TypeDef "Modèle"; // déclarer un pointeur pour le muntructeur à base de muntructeur (pystructeur); // déclarer une instance d'astruct qui "flotte" avec le pmystruct à tout moment je modifie la valeur du PMYStructeur, la mémoire que les références du muntructeur changent avec elle.



2
votes

Si vous voulez Thestruct Pour vous reposer sur le * pstructruct pour la valeur de pstructeur au moment de l'affectation / de la définition de Thestruct , alors C ++ a ceci dans sa fonctionnalité de références, mais c ne le fait pas.

Si vous voulez theStract pour se référer à * pstructeur pour la valeur de la valeur de pstructeur à l'heure theStruct est utilisé est utilisé, cela peut être accompli avec une macro: xxx

dans de nombreuses circonstances, Cela serait considéré comme une mauvaise pratique.


1 commentaires

Fondamentalement, j'aimerais créer une instance particulière d'une structure pour être "jointe" à un pointeur particulier, de sorte que je n'ai pas à taper pointeur -> devant chaque référence.



0
votes

Voulez-vous dire

object->field = 42;
bar(object); // pass a pointer


0 commentaires