3 votes

initialiser le pointeur de structure

typedef struct
{
  char *s;
  char d;
}EXE;
EXE  *p;

Pour ce qui précède struct comment initialiser la structure avec un pointeur ? Je sais que pour un non-pointeur on fait EXE a[] = { {"abc",1}, {"def",2} }; . De même, est-il possible d'utiliser un pointeur après avoir alloué la mémoire ? Disons que p[] = { {"abc",1},.. so on} . En fait, je veux l'initialiser dynamiquement. Merci.

7voto

EnterKEY Points 1150

Nous pouvons initialiser la structure avec un pointeur comme ci-dessous

example:
 int i;
 char e[5]="abcd";
 EXE *p=malloc(sizeof(*p));
 for(i = 0;i < 5;i++)
   *(p+i)=(EXE){e,i+48};

1voto

someone Points 859

Tout d'abord, vous devez allouer de la mémoire pour cela. char * et après cela, utilisez strcpy Fonction de bibliothèque permettant de copier les données d'un élément de structure.

p->s = strcpy(s,str);  //where str source, from where you need to copy the data

J'espère que cela vous aidera. Bien que je puisse vous donner le code complet pour cela, mais je veux que vous essayiez.

Vous pouvez utiliser ce Allocation dynamique d'une structure C ?

et c'est une question qui fait double emploi.

1voto

yulian Points 1555

Vous devez comprendre comment fonctionne un pointeur alloué :

  1. Supposons que vous ayez alloué de la mémoire pour trois structs Ptr = malloc(3*sizeof(EXE)) .
  2. Ensuite, lorsque vous ajoutez 1 à Ptr, il arrive à la structure suivante. Vous avez un bloc de mémoire divisé par 3 (3 blocs de mémoire plus petits pour chaque structure).
  3. Donc, il faut accéder aux éléments de la première structure et ensuite déplacer le pointeur vers la suivante.

Vous pouvez comprendre ici comment cela fonctionne :

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char *s;
    char d;
} EXE;

int main()
{
    int i;
    EXE *Ptr;

    Ptr = malloc(3*sizeof(EXE)); // dymnamically allocating the
                                 // memory for three structures
    Ptr->s = "ABC";
    Ptr->d = 'a';

//2nd
    Ptr++;     // moving to the 2nd structure
    Ptr->s = "DEF";
    Ptr->d = 'd';

//3rd
    Ptr++;    // moving to the 3rd structure
    Ptr->s = "XYZ";
    Ptr->d = 'x';

//reset the pointer `Ptr`
    Ptr -= 2; // going to the 1st structure

//printing the 1st, the 2nd and the 3rd structs
    for (i = 0; i < 3; i++) {
        printf("%s\n", Ptr->s);
        printf("%c\n\n", Ptr->d);
        Ptr++;
    }   

    return 0;
}

Avis : - Si vous avez une variable d'une structure, utilisez . opérateur d'accès aux éléments. - Si vous avez un pointeur sur une structure, utilisez -> opérateur pour accéder aux éléments.

     #include <stdio.h>
     #include <stdlib.h>

     struct EXE {
         int a;
     };

     int main(){

    struct EXE variable;
    struct EXE *pointer;

    pointer = malloc(sizeof(struct EXE)); // allocating mamory dynamically 
                                      // and making pointer to point to this
                                      // dynamically allocated block of memory
    // like here
    variable.a = 100;
    pointer->a = 100;

    printf("%d\n%d\n", variable.a, pointer->a);

    return 0;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X