1[指针]在c++中的意义?



阅读cppreference我发现了这个例子:

int a[4] = {1, 2, 3, 4};
int* p = &a[2];
std::cout << p[1] << p[-1] << 1[p] << (-1)[p] << 'n'; // 4242

我对1[p](-1)[p]的含义感到困惑。在其他地方寻求帮助时,我被告知:1[ptr]相当于*(1 * sizeof(T) + ptr)"所以我理解为什么它输出4242,但我发现很难推理。因为通常把指针放在方括号里是没有意义的,而且它本身就是一个错误:

[cling]$ 1[p]
(int) 4
[cling]$ [p]
input_line_15:2:3: error: 'p' cannot be captured because it does not have
automatic storage duration
[p]
^

这只是我应该记住的语法的一个特例,还是我误解了语句背后的一些逻辑?

假设p为指针或数组,n为整数。当编译器看到以下内容:

p[n]

逻辑上将表达式解释为:

*(p+n)

当它看到这个时:

n[p]

编译器将其视为:

*(n+p)

在代数上与*(p+n)

相同因此:p[n] == n[p]

相关内容

  • 没有找到相关文章

最新更新