要将数组参数传递给函数,请指定没有任何括号的数组的名称。 例如,如果数组 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 ++编译器忽略原型中的变量名。 记住,原型告诉编译器参数的数量和每个参数的类型,参数的预期出现顺序。
下一个例子中的程序演示了传递整个数组和传递数组元素之间的区别。
例子
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