Help langage c

Fermé
lililoulou - 28 mai 2008 à 10:44
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 - 28 mai 2008 à 15:19
Bonjour,
j'ai besoin d'aide pour la compréhension d'un programme en c
c'est assez urgent. J'ai quelque notions mais quelques explication s'impose. J'ai déja visiter plein de site mais pour certaine ligne du programme je ne m'en sors pas et j'aurai besoin de votre confirmation.

double ztmp,coeftmp[7],*ptmp;
cela signifie t(il que le pointeur ptmp se promene dans le tableau coeftmp de 7 cellules? mais pourquoi avoir ajouter double ztmp

j=0;ptmp=coeftmp;

à quoi je ne comprend pas cette ligne

qu'est ce qu'un tableau isolé tout seul
Y->a=*ptmp;ptmp++;Y->b=*ptmp;ptmp++;Y->P=*ptmp

biensur a,b, P sont :
typedef struct{double a, b, P}COEFS;

merci à vous tous

3 réponses

Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 328
28 mai 2008 à 12:02
Salut.
Brouillon ton message !
Bon, quand tu fait "double a,b,c;" les virgules servent à déclarer en séquence. C'est à dire que c'est strictement équivalent à "double a;double b;double c;"
donc ta première question, la réponse est : non. ztmp, coeftmp, et ptmp sont 3 variables indépendantes.

j=0; peut pas répondre, je n'ai pas été présenter à j !
ptmp=coeftmp; tu fait pointé ptmp sur la première valeur du tableau coeftmp.
donc *ptmp==coeftmp[0]
en fesant ptmp++ tu fait pointé ptmp sur la case suivante de coeftmp, donc *ptmp==coeftmp[1]; maintenant.
Voilà, je pense que ça t'éclairera. Sinon, reprend tes cours sur les pointeurs.
0
nadsky Messages postés 162 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 11 décembre 2011 61
28 mai 2008 à 14:00
bonjour
En fait, ztmp est un double, coeftmp est un tableau de doubles de 7 doubles et ptmp est un pointeur sur double.
Tu déclares tes variables seulement, donc elles ne sont pas liées entre elles.

Par contre, je voudrais bien répondre à ta question, mais pourrais -tu éclaircir cette ligne :
Y->a=*ptmp;ptmp++;Y->b=*ptmp;ptmp++;Y->P=*ptmp

c'est trop confus...

enjoy
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
28 mai 2008 à 15:19
Y->a=*ptmp;ptmp++;Y->b=*ptmp;ptmp++;Y->P=*ptmp

c'est écrit de façon dégueulasse!!!
d'abord il n'y a pas de ";" à la fin, donc erreur.
il a une structure qui comporte au moins 3 éléments : a, b et P (dont on n'a par ailleurs pas vu le prototype ni la déclaration)
un pointeur vers cette structure qui s'appelle Y (idem côté déclaration et allocation... attention à l'erreur d'attribution d'une valeur sur un pointeur non initialisé... c'est un cas d'école!)
il initialise d'abord le membre a de la structure pointée par Y avec le contenu de la variable pointée par ptmp (qui pointe donc vers le 1er élément du tableau coeftmp)
ensuite il incrémente ptmp pour qu'il pointe vers le 2e élément du tableau coeftmp
il initialise ensuite le membre b de la structure pointée par Y avec le contenu de la variable pointér par ptmp (donc le 2e membre de coeftmp
il incrémente encore ptmp pour qu'il pointe vers le 3e élément de corftmp
puis il initialise le membre P de la structure pointée par Y avec le contenu de la variable pointér par ptmp

ça serait plus propre d'écrire
/// prototypage de la structure
/// déclaration du pointeur Y et initialisation (par un new ou un malloc)
double coeftmp[7],*ptmp;
/// remplissage de coeftmp
ptmp=coeftmp;
Y->a=*ptmp;
ptmp++;
Y->b=*ptmp;
ptmp++;
Y->P=*ptmp;
0