Déclarer un type en langage c ?
Résolu
yaorens
Messages postés
205
Date d'inscription
Statut
Membre
Dernière intervention
-
yaorens Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
yaorens Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je voudrais savoir comment déclarer un type , du genre:
Type
Point=enregistrement
X : entier ;
Y : entier ;
FinEnregistrement
et ensuite comment assigner un tableau à un type , du genre :
Courbe : tableau[1..100] de point ;
je voudrais savoir comment traduire cela en langage c.
merci de votre attention .
je voudrais savoir comment déclarer un type , du genre:
Type
Point=enregistrement
X : entier ;
Y : entier ;
FinEnregistrement
et ensuite comment assigner un tableau à un type , du genre :
Courbe : tableau[1..100] de point ;
je voudrais savoir comment traduire cela en langage c.
merci de votre attention .
A voir également:
- Definir un type en c
- Définir google comme page d'accueil - Guide
- Clear type - Guide
- Definir foyer - Accueil - Guide streaming
- Type de ram - Guide
- Définir retrait - Guide
4 réponses
A mon sens, ce que les programmeurs Pascal ont beaucoup de mal à saisir, c'est qu'en déclarant "struct point" on ne crée pas un type (contrairement au Pascal, où un "record" est nécessairement une définition de type).
En C, "struct point" crée juste une structure (dont l'étiquette est "point"), et la structure doit toujours être désignée avec le terme "struct", et non uniquement avec son étiquette, lors de la déclaration de variables ou de l'initialisation de la structure.
Ainsi, pour créer un tableau de "struct", on doit utiliser de nouveau le mot clef "struct" : "struct point ligne[100];", alors qu'on n'est plus en train de définir la structure "point", mais de l'utiliser pour définir le tableau.
En fait, comme yaorens veut "déclarer un type", ce qu'il veut probablement c'est utiliser "typedef struct", et créer un type (disons "TPoint").
Il y a des explications claires sur ce sujet (et d'autres) :
ici : http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node78.html
et là : http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node115.html
Dal
En C, "struct point" crée juste une structure (dont l'étiquette est "point"), et la structure doit toujours être désignée avec le terme "struct", et non uniquement avec son étiquette, lors de la déclaration de variables ou de l'initialisation de la structure.
Ainsi, pour créer un tableau de "struct", on doit utiliser de nouveau le mot clef "struct" : "struct point ligne[100];", alors qu'on n'est plus en train de définir la structure "point", mais de l'utiliser pour définir le tableau.
En fait, comme yaorens veut "déclarer un type", ce qu'il veut probablement c'est utiliser "typedef struct", et créer un type (disons "TPoint").
typedef struct { int : X; int : Y; } TPoint; TPoint courbe[100];
Il y a des explications claires sur ce sujet (et d'autres) :
ici : http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node78.html
et là : http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node115.html
Dal
salut.
ça ressemble à du pascal ce que tu as écris.
En C, l'équivalent de l'enregistrement c'est la structure, introduite par le mot "struct". Pour plus de détail, prend un cours de C, c'est expliquer en long et en large.
Ensuite, c'est comme pour tout les tableaux en C, il suffit de mettre le nom de la structure.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
ça ressemble à du pascal ce que tu as écris.
En C, l'équivalent de l'enregistrement c'est la structure, introduite par le mot "struct". Pour plus de détail, prend un cours de C, c'est expliquer en long et en large.
Ensuite, c'est comme pour tout les tableaux en C, il suffit de mettre le nom de la structure.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
[DAl] , merci pour tes infos ,
alors , si je comprends bien pour définir une strucutre , je fais typedef struct
un peu comme un enregistrement , mais sauf que là , je précède "struct" de typedef , c'est bien cela ??
alors , si je comprends bien pour définir une strucutre , je fais typedef struct
un peu comme un enregistrement , mais sauf que là , je précède "struct" de typedef , c'est bien cela ??
ma question est , à quel moment mettre typedef avant struct et à quel moment on ne le mets pas, excusez , je mets du temps à comprendre
Tu n'es pas obligé de définir un type pour utiliser une structure.
Mais ta question était intitulée "Déclarer un type en langage C" et particulièrement un type de structure, et c'est pourquoi j'ai suggéré l'utilisation de typedef.
Tu pourras définir un type pour rendre ton code plus lisible, pour donner un nom plus directement évocateur, dès lors que tu vas utiliser beaucoup de fois la structure, mettre de la sémantique dans ton code, etc. C'est une affaire de style de programmation aussi.
Voilà un exemple où on utilise une structure sans définir de type, pour créer un tableau "ligne" de pointeurs sur des structures, pouvant avoir une taille allouée dynamiquement.
On répète "struct point" autant de fois que l'on doit se référer à la structure créée.
En définissant un type de structure, on peut faire la même chose comme cela :
C'est à toi de décider ce qui est le plus clair.
Note que la syntaxe de struct est très versatile. Tu peux, ou non, affecter une étiquette, déclarer une variable dans la foulée, la précéder de typedef pour déclarer un type dans la foulée , ou utiliser typedef sur une ligne séparée pour définir un type en te référant à l'étiquette identifiant la structure,...
il n'est pas utile, par exemple, de déclarer un type, si tu ne vas utiliser la structure que pour déclarer une ou deux variables a et b.
Tu vois que tu n'as même pas besoin de nommer ta structure avec une étiquette.
Vois ton manuel préféré, et fais plusieurs exemples pour bien assimiler.
Dal
Mais ta question était intitulée "Déclarer un type en langage C" et particulièrement un type de structure, et c'est pourquoi j'ai suggéré l'utilisation de typedef.
Tu pourras définir un type pour rendre ton code plus lisible, pour donner un nom plus directement évocateur, dès lors que tu vas utiliser beaucoup de fois la structure, mettre de la sémantique dans ton code, etc. C'est une affaire de style de programmation aussi.
Voilà un exemple où on utilise une structure sans définir de type, pour créer un tableau "ligne" de pointeurs sur des structures, pouvant avoir une taille allouée dynamiquement.
struct point { int X; int Y; }; struct point *ligne[] = { NULL }; ligne[0] = malloc(sizeof(struct point) * nb_points_souhaites); if (ligne[0] != NULL) { (...)
On répète "struct point" autant de fois que l'on doit se référer à la structure créée.
En définissant un type de structure, on peut faire la même chose comme cela :
typedef struct { int X; int Y; } POINT; POINT *ligne[] = { NULL }; ligne[0] = malloc(sizeof(POINT) * nb_points_souhaites); if (ligne[0] != NULL) { (...)
C'est à toi de décider ce qui est le plus clair.
Note que la syntaxe de struct est très versatile. Tu peux, ou non, affecter une étiquette, déclarer une variable dans la foulée, la précéder de typedef pour déclarer un type dans la foulée , ou utiliser typedef sur une ligne séparée pour définir un type en te référant à l'étiquette identifiant la structure,...
il n'est pas utile, par exemple, de déclarer un type, si tu ne vas utiliser la structure que pour déclarer une ou deux variables a et b.
struct { int X; int Y; } a,b;
Tu vois que tu n'as même pas besoin de nommer ta structure avec une étiquette.
Vois ton manuel préféré, et fais plusieurs exemples pour bien assimiler.
Dal
le code ci-dessus est pour illustrer l'usage de typedef et de struct et n'est pas fonctionnel pour faire vraiment un tableau dynamique de ce type. Ce n'était pas ta question, mais juste au cas où quelqu'un tombe sur ce code, il faudrait probablement plutôt créer un tableau de pointeurs sur des pointeurs de POINT, puis allouer non seulement l'espace pour ce tableau, mais aussi l'espace pour chaque élément du tableau dont on mettra le pointeur dans ledit tableau.
Quelque chose comme cela serait mieux, je crois :
Il ne faudra pas oublier de libérer la mémoire allouée pour chaque POINT en faisant free(ligne[n]), puis la mémoire allouée au tableau de pointeurs lui même avec free(ligne).
Ouf !
(qui a dit que le C était facile ?)
Dal
Quelque chose comme cela serait mieux, je crois :
typedef struct { int X; int Y; } POINT; POINT **ligne; ligne = (POINT**)calloc(nb_points_souhaites, sizeof(POINT*)); if (ligne != NULL) { for (n=0; n<nb_points_souhaites; ++n) { ligne[n] = (POINT*)malloc(sizeof(POINT)); if (ligne[n] != NULL) { /* mettre une valeur à ligne[n]->X */ /* mettre une valeur à ligne[n]->Y */ (...)
Il ne faudra pas oublier de libérer la mémoire allouée pour chaque POINT en faisant free(ligne[n]), puis la mémoire allouée au tableau de pointeurs lui même avec free(ligne).
Ouf !
(qui a dit que le C était facile ?)
Dal
excusez , j'ai encore quelque chose à vous demander ,
j'ai bien compris la création des types avec les enregistrements , mais si je veux par exemple déclarer un type : entier tableau[3] et que je veux que tableau2 ait la même dimension que mon deuxième tableau , comment faire ?? j'ai essayé ce code que voici , mais il ne passe pas .
bien sur je pourrai déclarer mon deuxième tableau avec une taille précise , mais je voulais apprendre à mieux maitriser les types ,
aidez moi juste pour ça , et je pourrai faire d'autres exercices tout seul.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
typedef int tnbre[3];
int tnbre1 = tnbre;
for(i=0; i<3; i++)
{
printf("veuillez entrer le nombre ");
scanf("%d",&tnbre1[i]);
}
printf("\n\n");
for(i=0; i<3; i++)
{
printf("%d"tnbre1[i]);
}
return 0;
}
merci pour votre attention
j'ai bien compris la création des types avec les enregistrements , mais si je veux par exemple déclarer un type : entier tableau[3] et que je veux que tableau2 ait la même dimension que mon deuxième tableau , comment faire ?? j'ai essayé ce code que voici , mais il ne passe pas .
bien sur je pourrai déclarer mon deuxième tableau avec une taille précise , mais je voulais apprendre à mieux maitriser les types ,
aidez moi juste pour ça , et je pourrai faire d'autres exercices tout seul.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
typedef int tnbre[3];
int tnbre1 = tnbre;
for(i=0; i<3; i++)
{
printf("veuillez entrer le nombre ");
scanf("%d",&tnbre1[i]);
}
printf("\n\n");
for(i=0; i<3; i++)
{
printf("%d"tnbre1[i]);
}
return 0;
}
merci pour votre attention
typedef courbe TPoint*;
ou
typedef Courbe TPoint[100];
Sinon.. je vois pas où tu veux en venir, Char Snipeur. Dans ton exemple, "courbe" ou "Courbe" doivent être des types existants (de base ou créés par l'utilisateur), et tu nommes un nouveau type "TPoint", qui serait un tableau de 100 Courbes ? (et pour le premier, est-tu sûr du placement de l'astérisque ?). Ou alors, je suis complètement à côté de la plaque (ce qui est possible aussi :-D).
Bien sûr, on peut créer un type à partir d'un autre type créé par l'utilisateur.
Pour créer un type TCourbe à partir d'un type TPoint, on pourrait, il me semble, faire :
Dal