PDA

View Full Version : کمک در رابطه با توضیح یک تابع



abtin256
شنبه 28 شهریور 1388, 02:42 صبح
با سلام

دوستان من در برنامه نویسی cمبتدی هستم 2تا سوال داشتم از شما

من رشته ام الکترونیک هستش دارم armمیخونم باید سی یاد بگیرم میخواستم بپرسم cباهاش میشه اینترفیس کار کرد ؟در کل میخوام یک محیطی طراحی کنم بعد باهاش اطلاعاتی به پورتها بفرستم

سوال دوم من دارم کتاب قمی رو میخونم نمیدونم شاید من سرم نمیشه ولی یکجاهایی خیلی بی سرو ته مثلا اگر لطف کنید در باره اجرای تابع با آدرس مخصوصا قسمت strcmpیک توضیح بدید

#include<stdio.h>
#include<conio.h>
#include<string.h>
void check(char*a,char*b,int(*s)(const char*,const char*));
int main(){
char s1[80],s2[80];
int (*p)(const char*,const char*);

system("cls");
p=strcmp;
printf("enter frist string:");
gets(s1);
printf("enter second string");
gets(s2);
check(s1,s2,p);
getch();
return 0;
}
void check(char *a,char *b,int(*s)(const char*,const char*))
{
if(!(s)(a,b))
printf("the string are equal.");
else
printf("string are not equal.");


}




و یک کتاب خوب یا یک رفرنس هم معرفی کنید(بیشتر مربوط به کار من یا همون برنامه نویسی سخت افزاری) خیلی گیج شدم

abtin256
شنبه 28 شهریور 1388, 13:23 عصر
آقا یکی نیست کمک کنه

abtin256
یک شنبه 29 شهریور 1388, 01:20 صبح
مرسی از توجه همتون ممنونم:عصبانی:

fam_jam_teh
شنبه 04 مهر 1388, 01:29 صبح
با سلام

دوستان من در برنامه نویسی cمبتدی هستم 2تا سوال داشتم از شما

من رشته ام الکترونیک هستش دارم armمیخونم باید سی یاد بگیرم میخواستم بپرسم cباهاش میشه اینترفیس کار کرد ؟در کل میخوام یک محیطی طراحی کنم بعد باهاش اطلاعاتی به پورتها بفرستم

سوال دوم من دارم کتاب قمی رو میخونم نمیدونم شاید من سرم نمیشه ولی یکجاهایی خیلی بی سرو ته مثلا اگر لطف کنید در باره اجرای تابع با آدرس مخصوصا قسمت strcmpیک توضیح بدید

#include<stdio.h>
#include<conio.h>
#include<string.h>
void check(char*a,char*b,int(*s)(const char*,const char*));
int main(){
char s1[80],s2[80];
int (*p)(const char*,const char*);

system("cls");
p=strcmp;
printf("enter frist string:");
gets(s1);
printf("enter second string");
gets(s2);
check(s1,s2,p);
getch();
return 0;
}
void check(char *a,char *b,int(*s)(const char*,const char*))
{
if(!(s)(a,b))
printf("the string are equal.");
else
printf("string are not equal.");


}




و یک کتاب خوب یا یک رفرنس هم معرفی کنید(بیشتر مربوط به کار من یا همون برنامه نویسی سخت افزاری) خیلی گیج شدم

سلام
من با توجه به اینکه شما در ارتباط با خود تابع strcmp مشکلی ندارید پاسخ می دم. اگه مشکلی با این تابع دارید لطفا بگید تا توضیح بدم.

برای اینکه بخواهیم از یک تابع استفاده کنیم باید با ذکر نام آن تابع و دادن ورودی های مناسب آن تایع را فراخوانی کنیم. مثلا
name(a,b) که در واقع این به این صورت انجام می شود که با نوشتن نام تابع ما داریم اشاره گر آنرا صدا می زنیم(اسم تابع مانند اسم آرایه ها به صورت اشاره گر است بنابراین اسم یک تابع به مکانی از حافظه اشاره می کند).در این مثالی که شما آورده اید. اسم تابع را در یک متغیر ریخته است که در بالا تعریفی از این متغیر آمده که نشان می دهد از نوع اشاره گر به تابعی است که دو ورودی می گیرد و خروجی نیز دارد.که نوع ورودی های آن اشاره گر به کاراکتر است و نوع خروجی آن int. بعد از آنکه p=strcmp اجرا شود متغیرp در واقع اشاره گری به تابع strcmp است.
خوب .... حالا اگر ما یک اشاره گر داشته باشیم و آنرا به عنوان پارامتر به تابعی بخواهیم بدهیم در تعریف تابع نیز باید مشخص کنیم که این متغیر معمولی نیست و از نوع اشاره گر است. در اینجا نیز به همین دلیل در تعریف تابع به این صورت می نویسیم:

void check(char *a,char *b,int(*s)(const char*,const char*))


و اما برای صدا زدن،
برای صدا زدن با استفاده از اشاره گر باز هم باید کلیه ورودی های لازم را در علامت() به تابع بدهیم و در اینجا اسم اشاره گر به تابع را به کار می بریم.