W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
要將數(shù)組參數(shù)傳遞給函數(shù),請(qǐng)指定沒有任何括號(hào)的數(shù)組的名稱。例如,如果數(shù)組 hourlyTemperatures 已聲明為函數(shù),則調(diào)用時(shí)會(huì)將數(shù)組 hourlyTemperatures 及其大小傳遞給函數(shù) modifyArray 。
下面是在將數(shù)組傳遞給函數(shù)時(shí)需要了解的一些重要事項(xiàng):
當(dāng)將數(shù)組傳遞給函數(shù)時(shí),通常也會(huì)傳遞數(shù)組大小,因此函數(shù)可以處理數(shù)組中特定數(shù)量的元素。否則,我們需要將這些知識(shí)構(gòu)建到被調(diào)用的函數(shù)中,或者更糟的是,將數(shù)組大小放在全局變量中。
C++ 通過引用將數(shù)組傳遞給函數(shù),即被調(diào)用函數(shù)可以修改調(diào)用者原始數(shù)組中的元素值。
數(shù)組名稱的值是數(shù)組第一個(gè)元素在計(jì)算機(jī)內(nèi)存中的地址。由于數(shù)組的起始地址被傳遞,所以被調(diào)用的函數(shù)精確地知道數(shù)組存儲(chǔ)在內(nèi)存中的位置。因此,當(dāng)被調(diào)函數(shù)修改其函數(shù)體中的數(shù)組元素時(shí),它是在修改其原始內(nèi)存位置中數(shù)組的實(shí)際元素。
盡管整個(gè)數(shù)組都是通過引用傳遞的,但是單個(gè)數(shù)組元素是按照簡(jiǎn)單變量的值傳遞的。
要將數(shù)組的元素傳遞給函數(shù),請(qǐng)?jiān)诤瘮?shù)調(diào)用中使用數(shù)組元素的下標(biāo)名稱作為參數(shù)。
對(duì)于通過函數(shù)調(diào)用接收數(shù)組的函數(shù),函數(shù)的參數(shù)列表必須指定函數(shù)期望接收的數(shù)組。
例如,函數(shù) modifyArray 的函數(shù)頭可能寫為:
void modifyArray( int b[], int arraySize )
該語(yǔ)句指示 modifyArray 期望接收參數(shù)b中的整數(shù)數(shù)組的地址和參數(shù) arraySize 中的數(shù)組元素的數(shù)量。數(shù)組的大小在數(shù)組括號(hào)中不是必需的。如果包括它,編譯器會(huì)忽略它;因此,任何大小的數(shù)組都可以傳遞給函數(shù)。
C++ 通過引用將數(shù)組傳遞給函數(shù)。當(dāng)被調(diào)用函數(shù)使用數(shù)組b時(shí),它指的是調(diào)用者中的實(shí)際數(shù)組(即本節(jié)開頭討論的 arrayhourlyTemperatures )。
注意 modifyArray 函數(shù)原型的奇怪外觀。
void modifyArray( int [] , int ) ;
這個(gè)原型可以用下列方式編寫,用于文檔目的。
void modifyArray( int anyArrayName[], int anyVariableName ) ;
但是,C++ 編譯器會(huì)忽略原型中的變量名。請(qǐng)記住,原型告訴編譯器參數(shù)的數(shù)量以及參數(shù)預(yù)期出現(xiàn)的順序中的每個(gè)參數(shù)的類型。
下面例子中的程序演示了傳遞整個(gè)數(shù)組和傳遞數(shù)組元素之間的區(qū)別。
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
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: