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++


Anmelden zum Antworten