Arduino教程34.Arduino 将数组传递给函数

要将数组参数传递给函数,请指定没有任何括号的数组的名称。例如,如果数组 hourlyTemperatures 已声明为函数,则调用时会将数组 hourlyTemperatures 及其大小传递给函数 modifyArray 

Table of Contents

重点

下面是在将数组传递给函数时需要了解的一些重要事项:

  • 当将数组传递给函数时,通常也会传递数组大小,因此函数可以处理数组中特定数量的元素。否则,我们需要将这些知识构建到被调用的函数中,或者更糟的是,将数组大小放在全局变量中。
  • C++ 通过引用将数组传递给函数,即被调用函数可以修改调用者原始数组中的元素值。
  • 数组名称的值是数组第一个元素在计算机内存中的地址。由于数组的起始地址被传递,所以被调用的函数精确地知道数组存储在内存中的位置。因此,当被调函数修改其函数体中的数组元素时,它是在修改其原始内存位置中数组的实际元素。
  • 尽管整个数组都是通过引用传递的,但是单个数组元素是按照简单变量的值传递的。
  • 要将数组的元素传递给函数,请在函数调用中使用数组元素的下标名称作为参数。
  • 对于通过函数调用接收数组的函数,函数的参数列表必须指定函数期望接收的数组。
  • 例如,函数 modifyArray 的函数头可能写为:
void modifyArray( int b[], int arraySize )
  • 该语句指示 modifyArray 期望接收参数b中的整数数组的地址和参数 arraySize 中的数组元素的数量。数组的大小在数组括号中不是必需的。如果包括它,编译器会忽略它;因此,任何大小的数组都可以传递给函数。
  • C++ 通过引用将数组传递给函数。当被调用函数使用数组b时,它指的是调用者中的实际数组(即本节开头讨论的 arrayhourlyTemperatures )。

注意 modifyArray 函数原型的奇怪外观。

void modifyArray( int [] , int ) ;

这个原型可以用下列方式编写,用于文档目的。

void modifyArray( int anyArrayName[], int anyVariableName ) ;

但是,C++ 编译器会忽略原型中的变量名。请记住,原型告诉编译器参数的数量以及参数预期出现的顺序中的每个参数的类型。

下面例子中的程序演示了传递整个数组和传递数组元素之间的区别。

例子

void modifyArray( int [], int ); // appears strange; array and size
void modifyElement( int ); // receive array element value

void setup () {
   Serial.begin (9600);
   const int arraySize = 5; // size of array a
   int a[ arraySize ] = { 0, 1, 2, 3, 4 }; // initialize array a
   Serial.print ( "Effects of passing entire array by reference:" ) ;
   // output original array elements
   for ( int i = 0; i < arraySize ; ++i )
   Serial.print ( a[ i ] ) ;
   Serial.print ("\r" ) ;
   Serial.print ("The values of the modified array are:\n" );
   // output modified array elements
   for ( int j = 0; j < arraySize; ++j )
   Serial.print ( a[j ] ) ;
   Serial.print ("\r" ) ;
   Serial.print ("\r\rEffects of passing array element by value:" );
   Serial.print ( "\ra[3] before modifyElement: " );
   Serial.print ( a[ 3 ] );
   Serial.print ( "\ra[3] after modifyElement: " );
   Serial.print ( a[ 3 ] );
}

void loop () {

}

// in function modifyArray, "b" points to the original array "a" in memory

void modifyArray( int b[], int sizeOfArray ) {
   // multiply each array element by 2
   for ( int k = 0 ; k < sizeOfArray ; ++k )
   b[ k ] *= 2;
} 

// end function modifyArray
// in function modifyElement, "e" is a local copy of
// array element a[ 3 ] passed from main

void modifyElement( int e ) {
   // multiply parameter by 2
   Serial.print ( "Value of element in modifyElement: " );
   Serial.print ( ( e *= 2 ) );
} 

// end function modifyElement

结果

Effects of passing entire array by reference:01234
The values of the modified array are:01234

Effects of passing array element by value:
a[3] before modifyElement: 3
a[3] after modifyElement: 3
$ is not a hexadecimal digit
f is a hexadecimal digit

发布者:suiyublg,转转请注明出处:https://huibian.net/1014-3/

(0)
suiyublg的头像suiyublg
上一篇 2017年3月30日 17:18
下一篇 2017年3月30日 18:28

相关推荐

  • Arduino传感器03.Arduino 水位检测器/传感器

    水位传感器砖设计用于水位检测,可广泛应用于检测降雨,水位,甚至液体泄漏。 将水位传感器连接到Arduino是检测泄漏,溢出,洪水,雨水等的好方法。它可用于检测水的存在,水位,体积以及是否缺水。当这个用来提醒你给植物浇水时,有一个比较好的Grove传感器。传感器具有一系列暴露的迹线,当检测到水时读取LOW。 在本章中,我们将把水位传感器连接到Arduino上的…

    2017年4月22日
    7500
  • Arduino教程17.Arduino 布尔运算符

    假设变量A为10,变量B为20,则: 运算符名称 运算符简写 描述 例子 and(与) && 称为逻辑运算符与。如果两个操作数都是非零,那么条件为真。 (A && B)为真 or(或) || 称为逻辑OR运算符。如果两个操作数中的任何一个非零,则条件变为真。 (A || B)为真 not(非) ! 称为逻辑运算符非。用于反转其…

    2017年3月23日
    5200
  • Arduino教程25.Arduino while循环

    while循环将会连续、无限循环,直到括号()内的表达式变为false。必须用一些东西改变被测试的变量,否则while循环永远不会退出。 while循环语法 while(expression) { Block of statements; } while循环执行顺序

    2017年3月25日
    4900
  • Arduino电机控制03.Arduino 步进电机

    步进电机是无刷同步电机,它将完整的旋转分成多个步骤。与无刷直流电机不同,当向其施加固定的直流电压时,它将连续旋转,步进电机以不连续的步进角旋转。 因此,步进电机被制造成具有每转12,24,72,144,180和200的步长,从而产生每步30°,15°,5°,2.5°,2°和1.8°的步进角。步进电机可以有或没有反馈控制。 想象一下在RC飞机上的电机。电机在一…

    2017年4月28日
    9500
  • Arduino声音01.Arduino 音调库

    在本章中,我们将使用Arduino音调库。它只是一个Arduino库,可以在任意Arduino引脚上产生指定频率(50%占空比)的方波。持续时间可以有选择的指定,否则方波会一直持续到stop()函数被调用。该引脚可以连接到压电蜂鸣器或扬声器播放音调。 警告 – 不要将引脚直接连接到任何音频输入。电压远远高于标准线路电压,并可能损坏声卡输…

    2017年4月29日
    15700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
欢迎大家来到大雄学编程!