C++中1[指针]的含义?
Meaning of 1[pointer] in 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]
正在阅读 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]