خروجی تابع از نوع اشاره گر در زبان C
بازگشت دادن یک اشاره گر از یک تابع شبیه بازگشت دادن یک آرایه از یک تابع است. زیرا آرایه نیز اشاره گر ثابت است. برای این که یک تابع بتواند یک اشاره گر را به عنوان خروجی برگداند باید به شکل زیر تعریف شود:
1 2 3 4 5 | int * myFunction() { . . . } |
نکته مهمی که باید به آن توجه کنید این است که زبان C نمی تواند آدرس متغیری که در بلوک خودش است (یعنی به عنوان متغیر محلی آن تابع است) را به خارج از تابع بفرستد. بنابراین اشاره گری که قرار است بازگشت داده شود باید به صورت static تعریف شود.
تابع زیر را در نظر بگیرید که 10 عدد تصادفی تولید می کند و آن ها را در قالب یک آرایه باز می گرداند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> #include <time.h> /* function to generate and return random numbers. */ int * getRandom( ) { static int r[10]; int i; /* set the seed */ srand( (unsigned)time( NULL ) ); for ( i = 0; i < 10; ++i) { r[i] = rand(); printf("%d\n", r[i] ); } return r; } /* main function to call above defined function */ int main () { /* a pointer to an int */ int *p; int i; p = getRandom(); for ( i = 0; i < 10; i++ ) { printf("*(p + [%d]) : %d\n", i, *(p + i) ); } return 0; } |
زمانی که کد بالا توسط کامپایلر C و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 1523198053 1187214107 1108300978 430494959 1421301276 930971084 123250484 106932140 1604461820 149169022 *(p + [0]) : 1523198053 *(p + [1]) : 1187214107 *(p + [2]) : 1108300978 *(p + [3]) : 430494959 *(p + [4]) : 1421301276 *(p + [5]) : 930971084 *(p + [6]) : 123250484 *(p + [7]) : 106932140 *(p + [8]) : 1604461820 *(p + [9]) : 149169022 |
هیچ نظری ثبت نشده است