在C++中对指针进行订阅/索引



我正在为正在学习的类编写一些代码,由于我不熟悉C++,我被下标指针弄糊涂了。

我的假设:

前缀为变量名的&为您提供了一个指向该值的内存地址的指针,与前缀为变量名称的*大致相反,后者反过来为您提供驻留在特定内存地址的值。

指针是可下标的,因此ptr[0] == ptrptr[n] == ptr + (n * data_bytes),其中data_bytes取决于指针的特定类型(例如,32位int的4字节宽)。

问题:

当我想给内存地址加下标时,我必须先把它放在一个变量中,我不明白为什么我不能直接给变量加下标。

最小代码示例:

#include <iostream>
using namespace std;
int main() {
int val = 1;
int *val_ptr = &val;
cout << &val << endl;
// works
cout << val_ptr[0] << endl;
// does not work
// cout << &val[0] << endl;
return 0;
}

附录

我知道一些相关的问题,但它们并没有真正帮助我理解这个特定的问题。

我看了看:

  • C++中的指针变量和引用变量之间有什么区别
  • 在c++中,与号(&)是如何工作的
  • 指针上的下标运算符
  • 使用指针订阅整数变量

虽然这几乎肯定是重复的(我很难成为第一个被指针弄糊涂的人),甚至可能有一个我在相关问题中忽略的答案,但我很感激任何帮助!

根据Ted Klein-Bergmann的评论,运算符优先级存在问题。

[]&之前被考虑。改为执行(&val)[0]

所以一个可行的例子是

#include <iostream>
using namespace std;
int main() {
int val = 1;
// does work now
cout << (&val)[0] << endl;
return 0;
}

最新更新