我正在学习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
。
答案 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++
。