下面是我的示例代码:
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++;将dstptr和srcptr都递增一次。但我需要将它们递增2。有没有关于如何在C中做到这一点的提示?
发布于 2017-08-24 20:50:52
它的名字叫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);发布于 2017-08-24 21:31:15
最好不要在同一个表达式中混合几个运算符,这是危险的,有时很难读懂。相反,请执行以下操作:
*dstptr = *srcptr;
dstptr += 2;
srcptr += 2;或者,使用可读性最强的形式,如果这是一个选项:
for(size_t i=0; i<n; i+=2)
{
...
dstptr[i] = srcptr[i];
...
}https://stackoverflow.com/questions/45862088
复制相似问题