Wer kann mir diese Zeile erklären pP->i = werte+*werte;
-
Hallo Leute wie es schon im Titel steht versteh ich die Zeile 21 nicht.
So wie ich es mir dachte, dass an den den Zeiger i in der Strucktur pP die "1"(werte[0]) und ein Zeiger auf werte[0] übergeben wird scheint es nicht zu sein.Daher, was passiert den in dieser Zeile?
#include <stdio.h> #include <stdlib.h> struct pointer{ char *c; int *i; double *d; struct pointer *p; }; int main() { int werte[] = {1,2,3,4,5,6,},i; char text[] = "Ein Text"; double *pD; struct pointer *pP; pD = (double*) calloc(6,sizeof(double)); for (i=0; i<6; ++i) *(pD+i) = 0.5*i; pP = (struct pointer*) calloc(2, sizeof(struct pointer)); pP->p = pP; (*pP).c = text+werte[3]; pP->i = werte+*werte; pP->d = &pD[3]; *(pP+1) = pP[0]; ++pP[1].i; printf("%d %f %s\n", *pP->i, *pP->d, pP->c); return EXIT_SUCCESS; }
Edit:
Da der Zeiger *werte auf das Feld werte[0] zeigt wird i auf dass Feld werte[0]+den inhalt von werte[0] gesetzt.
Wenn ich also mit dem debugger in werte[0] eine 3 schreibe zeigt i auf das Feld werte[3] in dder eine 4 steht.Großen Dank, habs verstanden.
-
i ist ein Zeiger auf int, er wird auf (das erste Byte von "werte" + sizeof(int) * erster Wert von "werte") gesetzt. Zeigt danach also auf die Zweite Zahl von "werte".
*werte ist äquivalent zu werte[0], *(werte + 1) zu werte[1], etc.
Edit:
Und "werte" ist hier äquivalent zu &werte[0]. (Was aber nicht immer so ist, z.B. sizeof() verhält sich anders, da &werte[0] eine Adresse und "werte" ein Array ist. Das Array kann aber in eine Adresse zerfallen.)
-
Wobei noch zu ergänzen wäre, dass ein Array im Gegensatz zum Zeiger ein unmodifiable lvalue ist.
-
Assertion failed: (m_pUsedList==NULL &&
> "CDynamicPool::~CDynamicPool() - NOT Clear"), function ~CDynamicPool,
> file ../../common/pool.h, line 41.kann das wer entschlüsseln bitte großes server problem
c/C++