8
votes

une structure sans nom de structure

La structure définie ci-dessous n'a pas de nom de structure. De plus, je suis incapable d'obtenir la partie de la matrice. Merci d'avance. Que signifie les valeurs dans le tableau de structure? xxx

c

8 commentaires

par "Obtenir la partie de tableau" Vous voulez dire "pour comprendre la partie de la matrice"?


Rien dans ce code n'a l'air incorrect; C'est déroutant et inutilement donc, à cela - qu'essayez-vous de faire?


C'est parfaitement bien pour une structure pour avoir aucun nom. Quelle est ta question?


Pourquoi utilisez-vous un pointeur sur INT et l'attribuez-le au tableau des structures ...? puis la désespecrée pour imprimer un entier - qui devrait avoir un nom de membre là-bas ....


C'est mes devoirs qui ont des questions à ce sujet comme ce qui veut * (x + 1) pointera et beaucoup d'entre eux. @Starkey: Je veux dire que ce que signifie les valeurs dans le tableau de structure?


Il y a au moins une forme de comportement non défini à cela. Si cela est vraiment des devoirs, une personne doit être tirée.


C'est d'un livre en fait! Laissez-nous c est le nom


@FAHAD - Vous pourriez vous faire une grande faveur en obtenant un livre décent.


5 Réponses :


3
votes

Vous pouvez avoir une structure sans nom, mais bien sûr, vous ne pouvez pas réutiliser son type. S est une gamme de structures, initialisées directement dans la déclaration.

Je doute que c'est la syntaxe correcte.


2 commentaires

Non, c'est syntaxiquement bien; La seule chose que j'appellerais un bug réel dans ce code est le pointeur arithmétique


Je suppose que cela ne sera même pas compilé pour l'affectation du pointeur, mais s'il coule comme i = (int *) s; alors il va peut-être imprimer ... 15? : p merde



2
votes

dans votre déclaration de struct

qui devrait lire xxx

grâce à vulkanino pour pointer un petit blooper! < / p>


7 commentaires

Les accolades internes ne sont pas nécessaires.


@Zack: Les accolades sont utilisées pour distinguer les structures en elles-mêmes dans l'initialisation ... Sauf si vous êtes correct?


Ne pense pas que c'est correct. Les structures sans nom sont belles. Votre code est faux, vous devriez déclarer mystructag mystructlist [] = ...


@ Tommieb75: Oui, c'est ce que font les accessoires internes, et c'est un bon style de les mettre là-bas, mais vous pouvez les laisser sortir si vous le souhaitez. Le code de l'OP compile bien (bien, avec des avertissements et une référence non définie à CLRSCR , mais ce n'est pas vraiment le point ici).


De plus, votre fragment de code déclare deux objets («muntructeur», ininitialisé et «mystructlist», initialisé), est-ce que c'est vraiment ce que vous vouliez dire? Et pourquoi l'espacement incompatible dans la liste d'initialistes?


@Zack: Bien sûr .... J'ai posté un commentaire ci-dessus dans la question de la pose d'un pointeur INT au tableau des structures ..... comme pour l'espacement incompatible qui ... peut être facilement réparé ... :)


Ce code ne compile même pas . Vous avez besoin struct mytructtag sur la dernière ligne, ceci est C, pas C ++. Et pourquoi déclarer un objet supplémentaire inutile ici ( muntruct )?



5
votes

Chaque fois que vous avez besoin de référer struct code> pas plus d'une fois qu'il ait logé la création de la variable de celui-ci sans lui donner le nom.

en syntaxe C de la réalisation est p>

struct 
   {
      int x,y;
   }


0 commentaires

16
votes

Maintenant que nous avons une question qui peut être répondue: xxx

ceci déclare un tableau nommé s , de structures anonymes. Chaque structure comporte deux champs int . La taille de la matrice n'est pas spécifiée, ce sera donc aussi gros qu'il doit être de contenir la liste d'initialistes ("Liste d'initialistes" est le terme technique de la liste des nombres ci-jointe de la BRACE après le signe égal).

Le code de votre manuel est négligé; Il ne s'agit pas de marquer des sous-structures dans la liste d'initialistes; Cela est autorisé, mais est considéré comme un style médiocre. Le compilateur l'interprète exactement la même chose que si le code avait été comme celui-ci: xxx

Chaque paire de numéros fermés d'attelée initialise un élément du tableau S . Le premier numéro initialise x et le second y . Donc, tout cela est vrai: xxx

et ainsi de suite.


1 commentaires

Soyez prudent avec le terme struct anonyme : il semble que cela signifie quelque chose d'autre en C11, et le meilleur nom ici est SSPLUTE STRIT : Stackoverflow.com/a/14248127/895245



3
votes

Ce n'est pas tout à fait clair ce que vous attendez de voir comme sortie du code que vous avez posté. Si vous vous attendez à voir «25», vous avez raison. Accéder aux membres de votre structure La façon dont vous essayez de faire, tandis que "valide" dans ce cas particulier, peut être très dangereux, sauf si vous savez exactement ce que vous faites. Considérez la modification mineure suivante à votre structure:

#include    <stdio.h>

int main()
{
    struct
    {
        int x, y;
    } *ps, s[] = { {10, 20}, {5, 25}, {8, 75}, {6, 2} };

    ps = s;

    printf( "%d\n", *(ps + 3) );
    printf( "%d\n", s[3].x );
    printf( "%d\n", (ps + 3)->x );

    return 0;
}


0 commentaires