آز آن جا که استراکچر ها انقدر ساده هستند که فقط با مثال قابل درک اند در این جلسه چند تابع ساده و مفید برای کار با استراکچرها را بررسی می کنیم
در این توابع از همان استراکچر personکه در جلسات قبل تعریف نمودیم استفاده می کنند.
struct date{
int yy,mm,dd;
};
struct person{
char name[40];
date tt;
float grade;
};
نکته:
نکته مهمی که یادم رفت بگم اینه که تعریف استراکچر ها باید قبل از تابع main باشند واین یک قاعده ی عمومی است و نه یک قاعده ی کلی یعنی ممکن است گاهی استراکچری جای دیگری تعریف شود.که بعنوان یک دانشجو با این حالت مواجه نخواهید شد(به احتمال زیاد)
در کلیه ی مثال ها فر ض می کنیم استراکچری از نوع personبه نام myvarداریم
مثال1:
تابع خواندن یک استراکچر از صفحه کلید.
void read(person *p){
cin>>p->name;
cin>>p->grade;
cin>>p->tt.dd;
cin>>p->tt.mm;
cin>>p->tt.yy;
}
1.فرا خوانی این تابع به صورت read(&myvar);خواهد بود.
2.آرگمان تابع به صورت اشاره گر تعریف شده چرا که باید مقادیر خوانده شده به برنامه ی اصلی بر گردانده شود.
3.به نحوه ی دسترسی به فیلدهای اشاره گر pتوجه کنید .(استفاده از عملگر(<-))
4.بعد از دسترسی به فیلد ttبرای دسترسی به فیلد های dd,mm,yyاز عملگر نقطه استفاده شده چرا که tt یک استراکچر است نه یک اشاره گر.
باز نویسی تابع بالا با استفاده از رفرنس ها بجای اشاره گر
void read(person &p){
cin>>p.name;
cin>>p.grade;
cin>>p.tt.dd;
cin>>p.tt.mm;
cin>>p.tt.yy;
}
فرا خوانی این تابع به صورت read(myvar);می باشد.
مثال 2:
تابع تعویض محتویات دو استراکچر:
void swap(person *p1,person *p2){
person tmp=*p1;
*p1=*p2;
*p2=tmp;
}
1.مانند همه اشاره گر ها برای دسترسی یه محتویات اشاره گر استراکچرها باید ار عملگر ستاره استفاده کنیم.
2.آرگمان ها به صورت اشاره گر هستند چون باید تغییرات به برنامه ی اصلی منتقل شود.
3.فراخوانی این تابع به صورت swap(&myvar1,&myvar2);است
باز نویسی لین تابع با رفرنس ها:
void swap(person &p1,person &p2){
person tmp=p1;
p1=p2;
p2=tmp;
}
3.فراخوانی این تابع به صورت swap(myvar1, myvar2);است
مثل3:
تابع خواندن آرایه ی nعنصری از استراکچر ها:
Void readarray(person p[],int n){
For(int i=0;i
cin>>p[i].name;
cin>>p[i].grade;
cin>>p[i].tt.dd;
cin>>p[i].tt.mm;
cin>>p[i].tt.yy;
}
}
1.نتایج این تابع باید به برنامه اصلی برگردانده شود.اما به دلیل این که آرایه ها خود در ارسال به توابع حالت رفرنسی دارند(مراجعه کنید به مبحث آرایه ها و توابع) نیاز به انجام کار خاصی برای این موضوع نیست.
2.از آنجا که عبارت p[i]اشاره گر نیست و یک استراکچر است برای دسترسی به فیلدهای آن از نقطه استفاده می کنیم.
3. در صورتی که آرایه ای به طولlen عنصر به نام arrداشته باشیم این تابع به صورت read(arr,len); فراخوانی می شود.
4. می توانستیم از از تابع readکه قبلا تعریف نمودیم برای خواندن عناصر آرایه استفاده کنیم.read(p[i]);در حالتی که ارگمان این تابع رفرنسی باشد. و read(&p[i]);در حالتی که آرگمان تابع اشاره گر باشد.



