فراخوانی توابع در c++ سی پلاس پلاس

1- فراخوانی توابع با مقدار در c++ سی پلاس پلاس :
مقادیر متغیرها به تابع فرستاده میشود و در آنجا توسط پارامترهای معمولی تابع دریافت میگردد.
2- فراخوانی تابع با آدرس در c++ سی پلاس پلاس :
آدرس متغیرها به تابع فرستاده میشود و در تابع توسط پارامترهایی از نوع اشاره گر دریافت می گردد.

مثال :
void f1( int,int);
void main()
{
int a=8 , b=12;
f1(a,b)
cout<<a<<b;
}
void f1( int a,int b)
{
a++;
b--;
cout<<a<<b;
}
مثال فراخوانی با آدرس :
void f1(int * , int *);
void main()
{
int a=8 , b=12;
f1 (&a , &b);
cout<<a<<b;
}
void f1(int *p1 , int *p2)
{
(*p1)++;
(*p2)--;
cout<<*p1<<*p2;
}
مثال :
تابعی بنویسید که ضرایب یک معادله ی درجه دوم در c++ را به عنوان پارامتر دریافت کند
و ریشه هایش را محاسبه و چاپ کند. تابع باید تعداد ریشه های معادله را بازگرداند.
مقادیر ریشه ها در تابع فراخواننده ی این تابع باید قابل استفاده باشد.
void main()
{
int n;
float a,b,c,x1,x2;
cin>>a>>b>>c;
n=f1(a,b,c,&x1,&x2);
if( n==0) puts("risheh nadarad" );
if( n==1) cout<<x1;
if( n==2) cout <<x1 <<x2;
}
int f( float a ,float b ,float c ,float *p1 ,float *p2 )
{
float d;
d= b*b-4*a*c;
if( d<0) return 0;
if( d==0)
{
*p1 = -b/2*a;
return 1;
}
*p1 =( -b+sqrt(d))/(2*a);
*p2 =( -b-sqrt(d))/(2*a);
return 2;
}
آرایه ها به عنوان آرگومان توابع :
در مورد آرایه ها فراخوانی توابع با آدرس در c++ به یکی از دو روش زیر صورت میگیرد:
روش اول :
void f1( int b[]);
void main()
{
int a[10] , j;
for( i=0 ; i<10 ;i++)
b[i]=i;
f1(a);
for(i=0 ; i<10;i++)
cout<<a[i];
}
void f1(int b[])
{
int i;
for(i=0 ; i<10 ; i++)
{
b[i]++;
cout<< b[i];
}
}
در این روش آرایه ی جدیدی تشکیل نمیشود. عناصر آرایه ی b به آرایه ی a منطبق میباشند.
روش دوم :
همانطور که گفته شد نام آرایه آدرس شروع آن را مشخص میکند.
بنابراین میتوانیم آدرس شروع آرایه را به تابع ارسال کنیم و در آنجا توسط
اشاره گر دریافت نماییم.
void f1(int *);
void main()
{
int a[10] , i;
for(i=0 ; i<10 ;i++)
a[i]=i;
f1(a);
for( i=0 ; i<10 ; i++)
cout<<a[i];
}
void f1( int *p)
{
int i;
for( i=0 ; i<10 ; i++ ,p++)
{
(*p)++;
cout<< *p;
}
}
مثال :
تابعی به نام slen بنویسید که آدرس یک رشته را به عنوان پارامتر دریافت کند و طولش را بنویسد.
int slen( char *p)
{
int i ;
for( i=0 ; *p ; i++ ;p++);
retuen i ;
}
مثال :
تابعی به نام scmp بنویسید که آدرس دو رشته ی s1 و s2 را به عنوان پارامتر دریافت کند و اگر
s1 از s2 بزرگتر بود یک عدد مثبت و اگر s2 بزرگتر بود عدد منفی و در صورت برابری صفر را برگرداند.
int scmp (char *p1 ,char *p2)
{
for( ; *p1 && *p2 && *p1 ==*p2 ; p1++ , p2++ );
if( *p1> *p2) return +1;
if( *p1< *p2) return -1;
return 0;
}