Wie Inkrementieren eines C-Pointers durch zwei

Hier ist mein Beispielcode:

float *dstptr;
float *srcptr;
float A[100];
float B[32];
int main(void)
  {
 int i=0;
 while(i < NUM_ITERATION)
  {
    srcptr = &B[0];
    for(i=0; i< 32; i++)
    {
        *dstptr++ = *srcptr++;
        dstptr = circptr(dstptr,1,(float *)&A[0], 100);
    }
    i++;
}

return 0;
}

Hier *dstptr++ = *srcptr++; Schritten beide dstptr und srcptr durch eine einmal. Aber ich brauche, erhöhen Sie Sie durch zwei.
Gibt es irgendeinen Hinweis, wie man dies in C?

  • versuchen Sie, mit ptr += 2
  • Meinst du *dstptr++ = 2 ?
  • Ich meine dstptr += 2 oder srcptr += 2
  • Sie nie initialisiert dstptr bevor Sie es verwenden. Das ist schlecht.
InformationsquelleAutor nisha | 2017-08-24



2 Replies
  1. 3

    Vorzugsweise durch mischen nicht mehrere Operatoren im gleichen Ausdruck, die gefährlich und manchmal schwer zu Lesen. Stattdessen, dies zu tun:

    *dstptr = *srcptr;
    dstptr += 2;
    srcptr += 2;

    Alternativ verwenden Sie die lesbare form, wenn dies eine option:

    for(size_t i=0; i<n; i+=2)
    {
      ...
      dstptr[i] = srcptr[i];
      ...
    }
  2. 3

    Seine genannt Zeiger-Arithmetik

    Und es erlaubt Ihnen zu tun

    dstptr += nOfElementsToSkip;
    srcptr += nOfElementsToSkip;
    *dstptr = *srcptr;

    sowie Inkrementieren. Oder wenn Sie nicht wollen, zu ändern, die Zeiger

    *(dstptr+nOfElementsToSkip) = *(srcptr+nOfElementsToSkip); //Same as
    dstptr[nOfElementsToSkip] = srcptr[nOfElementsToSkip];     //This is more clear

    BEARBEITEN:

    In Ihrem Fall ändern nOfElementsToSkip zu 2.

    Auch als @entspannen bereits erwähnt, haben Sie zum zuweisen dynamischer Speicher Zeiger sonst dereferenzieren würde führen zu undefiniertem Verhalten.

    float *dstptr = malloc(sizeof(float) * NUM_ITERATION);
    //Do something with pointer
    //And if you dont need them anymore
    free(dstptr);
    • Danke für Eure Hilfe
    • Schreiben Sie nie *(pointer + index) immer pointer[index]. Bedeutet genau das gleiche, aber ist so viel klarer.
    • In OP ‚ s Beispiel-code, der die Initialisierung wäre wahrscheinlich dstptr = &B[0];

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.