以下是我的示例代码:
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
增加一次。但我需要将它们增加两倍。
有什么线索在C中怎么做?
答案 0 :(得分:3)
它允许你做
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];
...
}