为什么 Radiohead 库接收字符数组的方法使用数组长度的引用传递?

Why does the Radiohead library's method for receiving an array of characters use pass-by-reference for array length?

我在 Arduino 草图中使用 Radiohead 库以 433.92 MHz 发送和接收传输。我正在使用的草图有效,我能够发送和接收嵌入字符串 "on air" 中的传感器数据(温度、湿度)。然而,我对一个实现细节感到困惑。

RH_ASKclass的recv()方法接收消息有两个参数。第一个是指向字符数组的指针。这是可以理解的,因为消息是作为字符数组发送和接收的。第二个是数组的长度。这是一个整数值,也作为指针传递。发送整数值本身不是更方便吗,即按值传递而不是按引用传递?

这是仿照文章 here 的相关代码片段。

包含库,创建接收器对象的实例并对其进行初始化。

// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>

// Create Amplitude Shift Keying Object
RH_ASK rf_driver;

// Initialize ASK Object
rf_driver.init();

将字符流接收到缓冲区,转换为字符串并解析传感器读数。

// Set buffer to size of expected message
uint8_t buf[11];
uint8_t buflen = sizeof(buf);

// Check if received packet is correct size
if (rf_driver.recv(buf, &buflen)) // Why &buflen and not simply buflen?
{

   // Message received with valid checksum
   // Get values from string

   // Convert received data into string
   str_out = String((char*)buf);

   // Thereafter, parse the string to extract sensor readings,
   // and print them out.               
}

如果能帮助我理解通过引用而不是值传递完美整数背后的概念,我将不胜感激。

因为函数需要把整数改成接收数据的长度

https://github.com/PaulStoffregen/RadioHead/blob/e8581c127fac9bffb0ee800ae18847f673e9b4a5/RH_ASK.cpp#L462