ارسال آرایهها به توابع، برای ارسال آرگومان از نوع رشته به تابع، نام تابع را بدون براکت بنویسید. به عنوان مثال، اگر آرایهای با نام hourlyTemperatures از نوع تابع تعریف شده باشد، فراخوانی این تابع آرایه hourlyTemperatures را ارسال کرده و modifyArray اندازه آن برای تابع را تعیین میکند.
نکات مهم ارسال آرایه به توابع:
در این بخش لیستی از نکات مهمی که شما باید هنگام ارسال آرایه به توابع بدانید را ارائه میکنیم:
- معمولا همراه با ارسال نام آرایه به تابع، تعداد اعضای آن نیز به تابع ارسال میشود تا بتوان پردازشهای لازم را روی اعضای آرایه انجام داد. در غیر اینصورت یا باید تعداد اعضا را درون تابع محاسبه کنیم یا به عنوان یک روش نامناسب تعداد اعضا را به عنوان کی متغیر سراسری تعریف کنیم.
- در برنامه نویسی به زبان C++ آرایهها توسط مرجع به تابع ارسال میشوند، بدین معنا که تابع میتواند مقادیر آرایه ارسال شده را تغییر دهد.
- نام آرایه در واقع کامپیوتر را به اولین خانه حافظه که آرایه اشغال میکند ارجاع میدهد. از آنجایی که آدرس آرایه نیز به تابع ارسال میشود، تابع میداند که دقیقا آرایه در کدام قسمت حافظه ذخیره شده است. در نتیجه هنگامی که در تابع مقادیر اعضای آرایه را تغییر میدهید در واقع مقادیر اعضای خود آرایه ارسال شده تغییر داده خواهد شد.
- اگر چه آرایه توسط مرجع به تابع ارسال میشود اما تک تک اعضای آرایه مشابه متغیرها توسط مقدار به تابع ارسال میشوند.
- به منظور ارسال اعضای آرایه به تابع، باید نام آرایه به همراه شماره اندیس عضو مورد نظر داخل براکت نوشته شود.
- برای دریافت یک آرایه توسط یک تابع، باید در بخش اعلان تابع مشخص گردد که آرگومان ورودی تابع از نوع آرایه است.
به عنوان مثال
به عنوان مثال بخش اعلان برای تابع modifyArray که میخواهد ورودی آرایه بگیرد باید مشابه کد زیر باشد:
void modifyArray( int b[], int arraySize )
کد مذکور تابع modifyArray را به شکلی تعریف میکند که آدرس یک آرایه صحیح را به عنوان ورودی b. تعداد اعضای آن را به عنوان ورودی arraySize دریافت میکند. نوشتن اندازه آرایه داخل براکت الزامی نیست و در صورت نوشتن نیز کامپایلر آن را در نظر نمیگیرد و آرایه با هر اندازهای را میتوان به تابع داد.
در زبان برنامه نویسی C++ آرایهها توسط مرجع به توابع ارسال میشوند. زمانی که تابع میخواهد از آرایه b که به آن ارسال شده است استفاده کند، به خود آرایه اصلی مراجعه کرده و مقدار آن را تغییر یا مورد استفاده قرار میدهد. (مثلا آرایه hourlyTemperatures)
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
امیدوارم این نوشته برایتان مفید باشد.
منبع: میکرودیزاینرالکترونیک