C++引用和指针int∗ p=&a[2]; 我正在学习C++,遇到了这个代码< /p> int a[] = {9,8,−5}; int∗ p = &a[2] ;

C++引用和指针int∗ p=&a[2]; 我正在学习C++,遇到了这个代码< /p> int a[] = {9,8,−5}; int∗ p = &a[2] ;,c++,arrays,pointers,reference,C++,Arrays,Pointers,Reference,我想知道这到底是什么意思?a是数组,p是指针。但a[]之前的&before是什么意思 那么这意味着什么呢 std::cout << (p − a) << "\n"; 及 ? 感谢您的帮助。在您的情况下,&用于将地址设置为值。因此将发生的是p将包含[2]的地址,因此p将是指向数组第三个元素的指针 编辑:包含p-a时此代码 int∗ p = &a[2]; 相当于: int∗ p = a + 2; 所以即使在数学上你们也可以看到,p-a等于a+2-a,所以我

我想知道这到底是什么意思?a是数组,p是指针。但a[]之前的&before是什么意思

那么这意味着什么呢

   std::cout << (p − a) << "\n";

?

感谢您的帮助。

在您的情况下,&用于将地址设置为值。因此将发生的是p将包含[2]的地址,因此p将是指向数组第三个元素的指针

编辑:包含p-a时

此代码

int∗ p = &a[2];
相当于:

int∗ p = a + 2;
所以即使在数学上你们也可以看到,p-a等于a+2-a,所以我认为结果应该是明显的,它等于2

注意:数组的名称可以衰减为指向第一个元素的指针,但不是那个指针,因为许多人可能会错误地这样说。差异显著

关于您的注释,是的,有区别,第一个表达式将第三个元素的地址分配给p,第二个是语法错误,因为您尝试将int分配给int*是不同的类型:

int a[] = { 1, 2, 3 };
int var = a[2]; // type of a[2] is int and value is 3
int *pointer = &a[2]; // type of &a[2] is int * and value is address of element that holds value 3
你们问题的主题是,你们认为&在这个上下文中意味着引用。它仅在应用于类型时表示引用,在表达式中使用时表示不同的内容:

int i, j;
int &r = i; // refence when applied to types
&i; // address of in this context
i&j; // binary AND in this

你在哪里看到这个代码的?谁写的?这段代码真的有问题吗∗ 符号而不是*?如果您只是通过检查代码来学习,我建议您停下来,采取更结构化的方法。找到一个并从那里开始。这里有一个很好的列表。我不知道是谁写的。这是我从uniok得到的一个练习,谢谢,那么std::cout作为p和a都是int指针,数组几乎相当于指向第一个元素的指针,p-a将返回内存中地址p和指向的点之间可以放置多少int。a指向第一个整数的开头,p指向第三个整数的开头,p-a将返回2。实际上,在地址a和地址p之间有一个由a指向的整数,即a[0],还有一个整数a[1]。
int a[] = { 1, 2, 3 };
int var = a[2]; // type of a[2] is int and value is 3
int *pointer = &a[2]; // type of &a[2] is int * and value is address of element that holds value 3
int i, j;
int &r = i; // refence when applied to types
&i; // address of in this context
i&j; // binary AND in this