【问题标题】:Increment pointer returned by function函数返回的递增指针
【发布时间】: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 解释的那样工作你提到的并不是真正的问题,而是其中的一个错误

标签: c++ c pointers


【解决方案1】:

您不能对非变量的事物调用一元运算符 (++)。 setValue(0) 被视为一个值。

所以,

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

应该是

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

【讨论】:

  • 谢谢。我现在注意到,通过调整函数以返回一个 int** 可以使用 *((*setValue(1))++) = 42;
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2013-04-10
  • 2017-03-25
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多