首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将C指针递增2

如何将C指针递增2
EN

Stack Overflow用户
提问于 2017-08-24 20:48:21
回答 2查看 2.7K关注 0票数 1

下面是我的示例代码:

代码语言:javascript
复制
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都递增一次。但我需要将它们递增2。有没有关于如何在C中做到这一点的提示?

EN

回答 2

Stack Overflow用户

发布于 2017-08-24 20:50:52

它的名字叫pointer arithmetic

它允许你这样做

代码语言:javascript
复制
dstptr += nOfElementsToSkip;
srcptr += nOfElementsToSkip;
*dstptr = *srcptr;

以及递增。或者如果您不想修改指针

代码语言:javascript
复制
*(dstptr+nOfElementsToSkip) = *(srcptr+nOfElementsToSkip); // Same as
dstptr[nOfElementsToSkip] = srcptr[nOfElementsToSkip];     // This is more clear

编辑

在您的示例中,将nOfElementsToSkip更改为2

同样,正如@unwind提到的,你必须为指针分配一些动态内存,否则取消引用将导致未定义的行为。

代码语言:javascript
复制
float *dstptr = malloc(sizeof(float) * NUM_ITERATION);
// Do something with pointer
// And if you dont need them anymore
free(dstptr);
票数 3
EN

Stack Overflow用户

发布于 2017-08-24 21:31:15

最好不要在同一个表达式中混合几个运算符,这是危险的,有时很难读懂。相反,请执行以下操作:

代码语言:javascript
复制
*dstptr = *srcptr;
dstptr += 2;
srcptr += 2;

或者,使用可读性最强的形式,如果这是一个选项:

代码语言:javascript
复制
for(size_t i=0; i<n; i+=2)
{
  ...
  dstptr[i] = srcptr[i];
  ...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45862088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档