有多种方法可以在C中递增指针,这有什么区别?

时间:2015-06-16 09:39:07

标签: c arrays pointers indexing

我正在学习C并试图弄清楚当我进行这个实例化时如何递增指针:int A[] = {111, 222, 333}; int *q = A;然后我试图从零索引增加指针q A到下一个。

我写了两个函数:

void incr_ptr_single ( int *p ) {
    *&p = *&p + 1;
}

void incr_ptr_double ( int **h ) {
    *h = *h + 1;
}

我理解说void incr_ptr( int *p) { p = p+1; } inc_ptr(q);不能做我想要的,因为C的功能是“按值传递”。

目前,incr_ptr_double(&q) == A[1]只有incr_ptr_single(q) == A[0]。我想知道如何修复incr_ptr_single函数,使其行为类似于incr_ptr_double

2 个答案:

答案 0 :(得分:2)

解决问题的一种方法" incr_ptr_single将使增量指针返回为函数结果:

int * incr_ptr_single ( int *p ) {
    return p + 1;
}

然后您可以将其称为:

q = incr_ptr_single(q);

答案 1 :(得分:1)

q++;

或者,如果您希望对代码进行模糊处理,使其变得更慢且可读性更低:

int* incr_ptr (const int* p) {
  return (int*)++p;
}

或者

void incr_ptr (int** p) 
{
  (*p)++;
}

还有许多其他方法可以使代码变得更糟,比如类似函数的宏。

或者,如果出于某种原因的糟糕的编程习惯不是你的一杯茶,那就去q++