انتقال آرایه به عنوان آرگومان به یک تابع، استثنا بر شکل استاندارد فراخوانی، با مقدار است، زیرا در اینجا فقط آدرس آرایه به تابع گذر میکند نه کپی تمام عناصر آرایه. وقتی که تابعی با آرگومانی از آرایه فراخوانده میشود اشارهگر به اولین عنصر در آرایه (یعنی آدرس اولین عنصر آرایه) به تابع گذر میکند. توجه داشته باشید که در C نام یک آرایه به تنهایی، یک اشارهگر به اولین عنصر آرایه است.
برای تعریف پارامتری که اشارهگر آرایه را دریافت میکند سه روش وجود دارد که به شرح زیر بیان میشود.
روش اول. در این روش، پارامتر مورد نظر به صورت آرایه تعریف میگردد، مانند مثال زیر.
#include<stdio.h>
void display (int num[10]) ;
main()
{
int a[10] , i ;
for (i = 0 ; i<10 ; + +i)
a [i] = i ;
display(a) ;
}
void noor(num)
int num[10] ;
{
int i ;
for (i=0 ; i<10 ; + +i)
printf (“\n %d” , num[i]) ;
}
در اینجا پارامتر num به صورت آرایهای ۱۰ عنصری از نوع int توصیف شده است اما C، به طور خودکار، آن را به اشارهگری با مقدار صحیح تبدیل میکند، زیرا هیچ پارامتری نمیتواند تمامی یک آرایه را دریافت کند. فقط یک اشارهگر به یک آرایه گذر داده میشود. بنابراین باید یک پارامتر اشارهگر آن را دریافت کند.
روش دوم. در این روش، برای توصیف یک پارامتر آرایه، آن را به عنوان آرایهای معرفی میکنیم که اندازه یا تعداد خانههای آن مشخص نشده باشد، مانند تابع زیر.
void noor (num)
int num[ ] ;
{
for (i= 0 ; i< 10 ; + +i)
printf(“\n%d” , num[i]) ;
}
که در این تابع num به صورت آرایهای از نوع int و با اندازه نامعلوم معرفی شده است. این روش در واقع num را به عنوان اشارهگر int تعریف میکند.
روش سوم. راه سوم آن است که num را به عنوان اشارهگر int تعریف کنیم که این روش مناسبترین و حرفهایترین روش برای انجام این کار است. این روش در زیر نشان داده شده است.
void noor (num)
int *num ;
{
int i ;
for (i =0 ; i<10 ; + +i)
printf (“%d” , num[ i ] (;
}
که در آن علامت “*” عملگر اشارهگر است. (اشارهگرها را در فصل ۸ بررسی میکنیم.)
یک نکته مهم در اینجا آن است که وقتی آرایهای آرگومان یک تابع باشد، آدرس آن به تابع گذر داده میشود. این حالت در زبان C، یک استثنا بر فراخوانی با مقدار، در رابطه با قرارداد گذردادن پارامتر، محسوب میگردد. بنابراین در مورد آرایهها، عملیاتی که تابع فرعی روی آرایه انجام میدهد، در روی محتوای خود آرایه خواهد بود؛ یعنی در اینجا دیگر نسخهای از آرایه به تابع انتقال نمییابد. پس نتیجه عملیات تابع روی آرایهها، در تابع اصلی (تابع فراخواننده) نیز منعکس خواهد شد.