2015-04-22 62 views
3

返回嘿,我尝试了一下用C/C++和指针 while reading stuff here增加指针的函数

我自己做了一个函数在某个地方在全局数组的指针返回INT。

int vals[] = { 5, 1, 45 }; 

int * setValue(int k) { 
    return &vals[k]; 
} 

但是我能做到这一点

int* j = setValue(0); 
j++; 
*j = 7; 

操纵阵列

但:

*(++setValue(0)) = 42; 

din't工作。 然而,请注意*setValue(0) = 42;作品

从我的理解我调用函数,并获得一些指针我增加它,使其指向我的数组中的第二个元素。最后,我遵循指针并为它所指向的整数指定一个新值。

我发现C++指针和引用可能有点混淆,但也许有人可以解释我这种行为。

编辑: 这个问题是不是Increment, preincrement and postincrement

重复,因为它是不是与前,后递增,而是约上是一个函数的返回指针增量。

EDIT2:

调整功能

int ** setValue(int k) { 
    int* x = &vals[k]; 
    return &x; 
} 

您可以使用

*(++(*setValue(1))) = 42; 
+1

这显然不是链接的问题的副本。 – mjs

+0

这不是重复的吗?不应该'j = setValue(0); J ++; * j = 7;'相当于'*(++ setValue(0))= 7;'而不是'*(setValue(0)++)= 7;'(注意前后增量)。 – cpburnz

+0

你是对的,但是既不是'*(++ setValue(0))= 7;'也不是'*(setValue(0)++)= 7;'按照@Eregrith的解释 你提到的并不是为了是真正的问题,但它是一个内部的错误 – xuma202

回答

5

你不能上的东西叫一元运算符(++)不是一个变量。 setValue(0)被视为一个值。

所以,

*(setValue(0)++) = 42; 

应该

*(setValue(0) + 1) = 42; 
+0

谢谢。 我现在注意到,调整函数返回一个int ** 可以使用 *((* setValue(1))++)= 42; – xuma202