PDA

View Full Version : اشارگر برای توابع در c++



Mostafa_G2
چهارشنبه 03 فروردین 1390, 13:05 عصر
سلام دوستان
سال نو رو به همتون تبریک میگم
دیشب یه مطلب خوندم مبنی بر اینکه توابع هم اشاره گر دارن و میتونیم با اشاره گرها به آنها اشاره کرد ( آنها را فراخوانی کرد ) یه مثال هم زده بود که هرچی من اجرا میگیرم کار نمیکنه



#include <iostream>
#include <stdio.h>

void check(char *a, char *b, int (*cmp)()) {
printf("\n <<teasting for equality>>");

if(!(*cmp)(a, b))
printf("\n the string are equal.");
else
printf("\n the string are not equal.");
}

int main() {
char s1[80];
char s2[80];
int (*P)();

P = strcmp();

printf("\n enter first string: ");
gets(s1);

printf("\n enter second string: ");
gets(s2);

check(s1, s2, strcmp);
system("PAUSE");
return 0;
}

sh4mid
چهارشنبه 03 فروردین 1390, 18:54 عصر
سلام
تو تابع check موقع تعریف باید بگی cmp چه پارامترهایی می گیره ، همچنین موقع تعریف تابع P
در ضمن موقع انتساب آدرس یک تابع به اشاره گر نباید از () استفاده کنی


void check(char *a, char *b, int (*cmp)(const char*,const char*)) {
printf("\n <<teasting for equality>>");

if(!(*cmp)(a, b))
printf("\n the string are equal.");
else
printf("\n the string are not equal.");
}


int main()
{
char s1[80];
char s2[80];
int (*P)(const char*,const char*);

P = strcmp;

printf("\n enter first string: ");
gets(s1);

printf("\n enter second string: ");
gets(s2);

check(s1, s2, strcmp);
system("pause");
return 0;
}

hi level hdd
پنج شنبه 04 فروردین 1390, 01:10 صبح
با سلام
فکر کنم تعریف p به این خاطر بوده که کمی پایین تر در تابع Check استفاده بشه وگر نه تعریفش کار خاصی
انجام نمیده.

Mostafa_G2
جمعه 05 فروردین 1390, 10:56 صبح
دمتون گرم
واقعا که کارتون درسته
من این قطعه کد رو از کتاب قمی که چاپ 16 سال پیش هست نوشتم , واقعا تعجب کردم که چرا P رو تعریف کرده :متفکر: , وقتی از P هیچ استفاده ایی نداره
بازم ازتوووون ممنونم , سال نوتون هم مبارک

Mostafa_G2
جمعه 05 فروردین 1390, 11:54 صبح
راستی این خط رو توضیح میدی

(const char*,const char*)

چرا از عبارت const استفاده کردی ؟ آیا میتونم به جای عبارت const از عبارت دیگه ایی استفاده کنم ؟
به جای *char میتونم از char* استفاده کنم ؟

hi level hdd
شنبه 06 فروردین 1390, 01:10 صبح
سال نو شما هم مبارک
عبارت *char به کامپایلر میگه که نامی که جلوی این عبارت قرار میگیره یه اشاره گر هستش
ولی عبارت دومی که مثال زدید اصلا تعریف نشده. آوردن عبارت Const پشت این نوع اونو غیر قابل
تغییر در طول برنامه میکنه. *char مثل متغییر String در دات نت هستش(اگه کار کرده باشی)
عبارت داخل پرانتز ،دو تا عبارت هستش که مقدار رشته ای یا آرایه ای از کاراکتر های اسکی رو قبول میکنه.

Mostafa_G2
شنبه 06 فروردین 1390, 08:44 صبح
دستت دردنکنه
محبتت رو فراموش نمیکنم
من اونقدر مشکل دارم که نگو و نپرس , باز هم مزاحمتون میشم
فعلا یا حق

sh4mid
یک شنبه 07 فروردین 1390, 01:21 صبح
چرا از عبارت const استفاده کردی
تابع strcmp (http://www.cplusplus.com/reference/clibrary/cstring/strcmp/) اینجوری تعریف میشود
int strcmp ( const char * str1, const char * str2 );
یعنی اینکه این تابع دوتا ورودی از نوع const char*
می گیره ، خب ما در تعریف تابع شما (check)می خواهیم از این تابع استفاده کنیم پس در تعریف اشاره گر به تابع (cmp) باید حواسمان باشد که امضای اشاره گر به تابع مان (همون cmp ) باید با امضای strcmp یکی باشد