Subscripting/Indexing C++ 中的指针

Subscripting/Indexing a Pointer in C++

我正在研究我正在学习的 class 的一些代码,由于我不熟悉 C++,我对下标指针感到困惑。

我的假设:

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

指针是可下标的,因此 ptr[0] == ptrptr[n] == ptr + (n * data_bytes),其中 data_bytes 取决于指针的特定类型(例如,32 位整数为 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;
}

附录

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

我看过:

虽然这几乎肯定是重复的(我不会是第一个被指针混淆的人),或者甚至可能有一个我在链接问题中忽略的答案,但我会很感激任何帮助!

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

[] is considered before &. Do (&val)[0] instead.

所以一个可行的例子是

#include <iostream>

using namespace std;

int main() {

    int val = 1;

    // does work now
    cout << (&val)[0] << endl;

    return 0;
}