ارسال آرایه ها به توابع

ارسال آرایه ها به توابع  ، برای ارسال آرگومان از نوع رشته به تابع، نام تابع را بدون براکت بنویسید. به عنوان مثال، اگر آرایه ای با نام 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++ نوشتن نام متغیرها در بخش اعلان توابع لازم نیست. در واقع اعلان یک تابع تنها تعیین می کند که تعداد ورودی ها و نوع آنها چیست و نوشتن بقیه جزئیات مانند نام ورودی ها، اندازه آنها و… اهمیتی ندارد.

مطلب پیشنهادی:  راه اندازی I2C در آردوینو

مثال ارسال آرایه ها به توابع

مثال زیر چگونگی ارسال یک آرایه و ارسال اعضای یک آرایه را نشان می دهد.

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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطلب پیشنهادی:   کتابخانه توابع ریاضی در آردوینو 

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *