【问题标题】:* vs & Arduino Class* vs & Arduino类
【发布时间】:2019-09-08 01:38:42
【问题描述】:

可能这类问题已经被问过很多次了,我还阅读了一些关于 C++ 中的指针和引用的博客。我对 C++ 的经验有限。但是,我正在浏览 Arduino 的 PID 库中的以下代码,但我无法理解在对象实例化期间使用了 "&" ,这在我看来就像通过引用传递。但是为什么 Class 使用 "*" 呢?

**************** Class instantiation ******************

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);    

**************** Code for class definition ******************

PID(double*, double*, double*, Input, Output,double, double, double, int, int);

【问题讨论】:

  • 理解许多符号在 c++ 中可能意味着不同的东西,这取决于它们的使用位置,这一点很重要。这里,& 是地址运算符并产生一个指向操作数的指针。它与引用无关,只是引用碰巧使用了相同的符号。
  • 听起来你可以使用good C++ book 这将真正帮助你理解指针和引用语法。
  • &variable 获得它的指针。 type* 声明一个指向 type 的指针。 type& 声明对 type 的引用。 *pointer获取它指向的变量的值。
  • 所以 &Input 在这种情况下是一个指针, * 给出存储在输入位置的值?我理解正确吗? @NathanOliver 谢谢你的书。

标签: c++ pointers arduino pass-by-reference


【解决方案1】:

在这种情况下 & 是地址运算符。

PID 构造函数的参数列表包含几个指针。 &Input 返回Input 的地址。指针存储什么?地址!

有关地址运算符的更多信息,请阅读:

https://en.cppreference.com/w/cpp/language/operator_member_access

1) &expr

...

1) 如果操作数是某个对象或函数的左值表达式 类型 T,operator& 创建并返回 T* 类型的纯右值,其中 相同的 cv 限定,即指向对象或函数 由操作数指定....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 2020-10-08
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-12-07
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多