嘿,我在这里读东西的同时用C/C++和指针进行了一些实验
我自己做了一个函数,在全局数组中的某个地方返回指向int的指针.
int vals[] = { 5, 1, 45 };
int * setValue(int k) {
return &vals[k];
}
Run Code Online (Sandbox Code Playgroud)
但是我能够做到这一点
int* j = setValue(0);
j++;
*j = 7;
Run Code Online (Sandbox Code Playgroud)
操纵数组
但那:
*(++setValue(0)) = 42;
Run Code Online (Sandbox Code Playgroud)
不行.但请注意*setValue(0) = 42;有效
从我的理解,我调用函数并得到一些指针,我增加它,使它指向我的数组中的第二个元素.最后,我遵循指针并为它指向的整数分配一个新值.
我发现C++指针和引用可能有些令人困惑,但也许有人可以解释我这种行为.
因为它不是关于前增量和后增量,而是关于作为函数返回的指针的增量.
EDIT2:
调整功能
int ** setValue(int k) {
int* x = &vals[k];
return &x;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用
*(++(*setValue(1))) = 42;
Run Code Online (Sandbox Code Playgroud)
你不能++在一个非变量的东西上调用一元运算符().setValue(0)被视为一个值.
所以,
*(setValue(0)++) = 42;
Run Code Online (Sandbox Code Playgroud)
应该
*(setValue(0) + 1) = 42;
Run Code Online (Sandbox Code Playgroud)