- Arduino - 教程
- Arduino - 概述
- Arduino - Board Description
- Arduino - 安装
- Arduino - 程序结构
- Arduino - 数据类型
- Arduino - Variables & 常量
- Arduino - 运算符
- Arduino - 控制声明( Control Statements)
- Arduino - 循环
- Arduino - 功能( Functions)
- Arduino - 字符串( Strings)
- Arduino - String对象( String Object)
- Arduino - Time
- Arduino - 阵列( Arrays)
- Arduino - I/O Functions
- Arduino - Advanced I/O Function
- Arduino - 字符函数( Character Functions)
- Arduino - 数学图书馆( Math Library)
- Arduino - 三角函数( Trigonometric Functions)
- Arduino - Due & Zero
- Arduino - 脉冲宽度调制( Pulse Width Modulation)
- Arduino - 随机数( Random Numbers)
- Arduino - 中断( Interrupts)
- Arduino - 沟通( Communication)
- Arduino - 内部集成电路( Inter Integrated Circuit)
- Arduino - 串行外设接口( Serial Peripheral Interface)
- Arduino - 闪烁LED( Blinking LED)
- Arduino - 褪色LED( Fading LED)
- Arduino - 读取模拟电压( Reading Analog Voltage)
- Arduino - LED条形图( LED Bar Graph)
- Arduino - 键盘注销( Keyboard Logout)
- Arduino - 键盘消息( Keyboard Message)
- Arduino - 鼠标按钮控制( Mouse Button Control)
- Arduino - 键盘串口( Keyboard Serial)
- Arduino - 湿度传感器( Humidity Sensor)
- Arduino - 温度传感器( Temperature Sensor)
- Arduino - Water Detector / Sensor
- Arduino - PIR传感器( PIR Sensor)
- Arduino - 超声波传感器( Ultrasonic Sensor)
- Arduino - 连接开关( Connecting Switch)
- Arduino - 直流电机( DC Motor)
- Arduino - 伺服电机( Servo Motor)
- Arduino - 步进电机( Stepper Motor)
- Arduino - 音调库( Tone Library)
- Arduino - 无线通信( Wireless Communication)
- Arduino - 网络通信( Network Communication)
- Arduino - 有用的资源
- Arduino - 讨论
- Show Example 1
- Show Example 2
- Show Example 3
- Show Example 4
- Show Example 5
- If statement
- If …else statement
- If…else if …else statement
- switch case statement
- Conditional Operator ? :
- while循环
- do…while循环
- for循环
- Nested循环
- Infinite循环
- delay () function
- delayMicroseconds () function
- millis () function
- micros () function
- 将数组传递给函数(Passing Arrays to Functions)
- 多维数组(Multi-Dimensional Arrays)
将数组传递给函数(Passing Arrays to Functions)
要将数组参数传递给函数,请指定不带任何括号的数组名称。 例如,如果已将数组hourlyTemperatures声明为函数,则调用将数组hourlyTemperatures及其大小传递给modifyArray函数。
重点
以下是将数组传递给函数时需要了解的一些重要事项列表 -
将数组传递给函数时,通常也会传递数组大小,因此该函数可以处理数组中特定数量的元素。 否则,我们需要将这些知识构建到被调用函数本身中,或者更糟糕的是,将数组大小放在全局变量中。
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 ++编译器会忽略原型中的变量名称。 请记住,原型告诉编译器参数的数量以及参数预期出现的顺序中每个参数的类型。
下一个示例中的程序演示了传递整个数组和传递数组元素之间的区别。
例子 (Example)
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
结果 (Result)
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论