我正在为正在学习的类编写一些代码,由于我不熟悉C++,我被下标指针弄糊涂了。
我的假设:
前缀为变量名的&
为您提供了一个指向该值的内存地址的指针,与前缀为变量名称的*
大致相反,后者反过来为您提供驻留在特定内存地址的值。
指针是可下标的,因此ptr[0] == ptr
和ptr[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;
}