【问题标题】:C++ references and pointers int∗ p = &a [ 2 ] ;C++ 引用和指针 int∗ p = &a [ 2 ] ;
【发布时间】:2016-12-29 12:38:13
【问题描述】:

我正在学习 C++,偶然发现了这段代码

    int a[] = {9,8,−5}; 
    int∗ p = &a[2] ;

并且想知道这到底是什么意思?所以 a 是一个数组,p 是一个指针。但是 [] 之前的 & 是什么意思?

那是什么意思呢?

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

编辑:

所以我已经阅读了一些答案,但我仍然不明白 & 的真正用途。有没有区别

  int∗ p = &a[2] ;

  int∗ p = a[2] ;

?

感谢您的帮助。

【问题讨论】:

  • 你在哪里看到这个代码?谁写的?
  • 这段代码真的有符号而不是*吗?
  • 如果你只是通过检查代码来学习,我建议你停下来并采取更有条理的方法。找到good book 并从那里开始。
  • 这里有一个很好的C++ books 列表。
  • 我不知道是谁写的。这是我从大学得到的一个练习

标签: c++ arrays pointers reference


【解决方案1】:

这段代码

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

您的问题的主题是您认为&amp; 在此上下文中表示引用。它仅在应用于类型时表示引用,在表达式中使用时表示不同的含义:

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

【讨论】:

    【解决方案2】:

    在您的情况下,&amp; 用于将地址获取为一个值。那么p 将包含a[2] 的地址,因此p 将是指向数组第三个元素的指针。

    编辑Demo(包括p-a

    【讨论】:

    • 好的,谢谢 std::cout
    • 由于pa 都是int 指针(数组几乎等同于指向第一个元素的指针),p-a 将返回如何许多int 可以放在地址pa 之间指向内存。 a 指向第一个整数的(开头),p 指向第三个整数的(开头),p-a 将返回 2。实际上,地址 a 和地址 p 之间存在整数由a(即a[0])和整数a[1]指向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多