View Full Version : سوال: چجوری میشه خروجی یه تابع ارایه باشه؟
mnsh87
یک شنبه 20 آذر 1390, 20:23 عصر
من نحوه نوشتنشو بلد نیستم
shahmohammadi
سه شنبه 22 آذر 1390, 16:29 عصر
سلام.
این کار زمانی به درد می خوره که بخواهیم تابعی بیاد یه آرایه رو با یه اندازه که بهش می دیم بسازه و به ما بده.
یا اینکه بیاد بر روی یه آرایه یه کارایی انجام بده (مرتب سازی، جستجو و...) و آرایه رو به ما بده.
کاربرد دیگری نمی شه براش پیدا کرد.
در هیچ کدوم از این موارد نیاز به این نداریم که خروجی تابع آرایه بشه. هر دو با روش ارجاع نوشته می شن. و خروجی هر دو تابع می تونه void هم باشه.
تابع اول آرایه ای رو به ما می ده که 10 تا خونه داره.
و مثال دوم یه کارایی رو توی آرایه انجام می ده.
void fu1(int **aray,int n)
{
**aray=(int *)calloc(n,sizeof(long int));
}
void fu2(int **aray,int n)
{
...
}
void main()
{
int *a;
fu1(&a,10);
for(int i=0;i<10;i++)
a[i]=i+5;
fu2(&a,10);
...
}
pe32_64
چهارشنبه 23 آذر 1390, 17:05 عصر
مشیه اما باید به اون ارایه یک pointer بر گردانید:
int* GetMarks(void);
این تابع آرایه ای از اعداد بر می گرداند.
shahmohammadi
پنج شنبه 24 آذر 1390, 21:25 عصر
من هم فکر کردم شاید اینطور هم بشه. ولی اینطوری طول آرایه پس چی میشه؟ به علاوه اگه حافظه ای هم alloc کنید با رسیدن به آخر تابع اون حافظه هم شاید از بین بره.
فکر نمی کنم این مورد به این آسونی ها باشه.
pe32_64
جمعه 25 آذر 1390, 11:58 صبح
جناب shahmohammadi (http://barnamenevis.org/member.php?191221-shahmohammadi)برای حل مشکل اول (طول آرایه) تابع یک پارامتری که بیانگر طول هستش رو می گیره.
برای حل مشکل دوم شما در مستندات تابع مشخص می کنید که با حافظه ی تخصیص داده شده چه باید کرد : 1-کاربر باید با تابع() X که شما نوشتی حافظه رو آزاد کنه(باید تابع را ایجاد کنی) 2- برای ازاد کردن حافظه از فلان تابع زبان c یا سیستم عامل استفاده کنه(تابع از قبل موجود).
و به همین آسونیه!!!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.