簡體   English   中英

如何將C指針加2

[英]How to increment a C pointer by two

這是我的示例代碼:

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;
}

這里*dstptr++ = *srcptr++; dstptrsrcptr都增加一次。 但是我需要將它們增加兩個。 有什么線索可以在C中執行此操作嗎?

它稱為指針算法

它可以讓你做

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

以及遞增。 或者,如果您不想修改指針

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

編輯

在您的情況下,將nOfElementsToSkip更改為2

同樣如@unwind所述,您必須為指針分配一些動態內存,否則取消引用會導致未定義的行為。

float *dstptr = malloc(sizeof(float) * NUM_ITERATION);
// Do something with pointer
// And if you dont need them anymore
free(dstptr);

最好不要在同一表達式中混用多個運算符,這很危險,有時很難閱讀。 相反,請執行以下操作:

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

或者,如果可以選擇的話,使用最易讀的形式:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM