【发布时间】:2015-04-22 15:34:00
【问题描述】:
嘿,我正在尝试使用 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;
不工作。
但是请注意*setValue(0) = 42; 有效
据我了解,我调用该函数并获取一些指针,然后将其递增以使其指向数组中的第二个元素。最后,我尊重指针并为其指向的整数分配一个新值。
我发现 C++ 指针和引用可能有点令人困惑,但也许有人可以解释一下这种行为。
编辑: 此问题与Increment, preincrement and postincrement 不重复
因为它不是关于前后增量,而是关于作为函数返回的指针的增量。
EDIT2:
调整函数
int ** setValue(int k) {
int* x = &vals[k];
return &x;
}
你可以使用
*(++(*setValue(1))) = 42;
【问题讨论】:
-
这显然不是链接问题的重复。
-
这不是重复的吗?
j = setValue(0); j++; *j = 7;不应该等同于*(++setValue(0)) = 7;而不是*(setValue(0)++) = 7;(注意前后增量)。 -
你是对的,但
*(++setValue(0)) = 7;和*(setValue(0)++) = 7;都没有像@Eregrith 解释的那样工作你提到的并不是真正的问题,而是其中的一个错误