课程表

Arduino 基础

Arduino 函数库

Arduino 进阶

Arduino 项目

Arduino 传感器

Arduino 电机控制

Arduino 声音

工具箱
速查手册

Arduino 将数组传递给函数

当前位置:免费教程 » 程序设计 » Arduino

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


要点

这里是一些重要的点,你需要知道,同时传递数组到函数 -

  • 当将数组传递给函数时,通常也会传递数组大小,因此函数可以处理数组中特定数量的元素。 否则,我们需要将这些知识构建到被调用的函数本身,或者更糟的是,将数组大小放在全局变量中。

  • C ++通过引用将数组传递给函数,即被调用函数可以修改调用者原始数组中的元素值。

  • 数组名称的值是计算机内存中数组第一个元素的地址。 由于数组的起始地址被传递,被调用的函数精确地知道数组存储在存储器中的哪里。 因此,当被调函数修改其函数体中的数组元素时,它将在其原始存储器位置修改数组的实际元素。

  • 尽管整个数组都是通过引用传递的,但是每个数组元素都是按照简单变量的值传递的。

  • 要将数组的元素传递给函数,请使用数组元素的下标名称作为函数调用中的参数。

  • 对于通过函数调用接收数组的函数,函数的参数列表必须指定函数期望接收数组。

  • 例如,函数modifyArray的函数头可能写为 -

  1. void modifyArray( int b[], int arraySize )
  • 该语句指示modifyArray期望接收参数b中的整数数组的地址和参数arraySize中的数组元素的数目。 数组的大小在数组括号中不是必需的。 如果包括它,编译器忽略它; 因此,任何大小的数组都可以传递给函数。

  • C ++通过引用将数组传递给函数。 当被调用函数使用数组名称b时,它指的是调用者中的实际数组(即本节开头讨论的arrayhourlyTemperatures)。

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

  1. void modifyArray( int [] , int ) ;

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

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

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


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


例子

  1. void modifyArray( int [], int ); // appears strange; array and size
  2. void modifyElement( int ); // receive array element value
  3.  
  4. void setup () {
  5. Serial.begin (9600);
  6. const int arraySize = 5; // size of array a
  7. int a[ arraySize ] = { 0, 1, 2, 3, 4 }; // initialize array a
  8. Serial.print ( "Effects of passing entire array by reference:" ) ;
  9. // output original array elements
  10. for ( int i = 0; i < arraySize ; ++i )
  11. Serial.print ( a[ i ] ) ;
  12. Serial.print ("\r" ) ;
  13. Serial.print ("The values of the modified array are:\n" );
  14. // output modified array elements
  15. for ( int j = 0; j < arraySize; ++j )
  16. Serial.print ( a[j ] ) ;
  17. Serial.print ("\r" ) ;
  18. Serial.print ("\r\rEffects of passing array element by value:" );
  19. Serial.print ( "\ra[3] before modifyElement: " );
  20. Serial.print ( a[ 3 ] );
  21. Serial.print ( "\ra[3] after modifyElement: " );
  22. Serial.print ( a[ 3 ] );
  23. }
  24.  
  25. void loop () {
  26.  
  27. }
  28.  
  29. // in function modifyArray, "b" points to the original array "a" in memory
  30.  
  31. void modifyArray( int b[], int sizeOfArray ) {
  32. // multiply each array element by 2
  33. for ( int k = 0 ; k < sizeOfArray ; ++k )
  34. b[ k ] *= 2;
  35. }
  36.  
  37. // end function modifyArray
  38. // in function modifyElement, "e" is a local copy of
  39. // array element a[ 3 ] passed from main
  40.  
  41. void modifyElement( int e ) {
  42. // multiply parameter by 2
  43. Serial.print ( "Value of element in modifyElement: " );
  44. Serial.print ( ( e *= 2 ) );
  45. }
  46.  
  47. // end function modifyElement


结果

  1. Effects of passing entire array by reference:01234
  2. The values of the modified array are:01234
  3.  
  4. Effects of passing array element by value:
  5. a[3] before modifyElement: 3
  6. a[3] after modifyElement: 3
  7. $ is not a hexadecimal digit
  8. f is a hexadecimal digit
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号