如何将C指针递增2

时间:2017-08-24 12:48:21

标签: c pointers

以下是我的示例代码:

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中怎么做?

2 个答案:

答案 0 :(得分:3)

它被称为pointer arithmetic

它允许你做

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

答案 1 :(得分:3)

优选地,通过不在同一表达式中混合多个操作符,这是危险的并且有时难以阅读。相反,这样做:

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

或者,如果这是一个选项,请使用最易读的形式:

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