ورود

View Full Version : سوال: استفاده از آرگومان اشاره گر با رفع محدودیت نوع



sina27
یک شنبه 11 شهریور 1397, 04:03 صبح
با سلام خدمت دوستان گرامی
من یه تابع دارم که می خوام مسئله ای رو چک کنه و سپس در صورت قبول یک متغیر رو بریزه داخل متغیر دیگر، و در صورت عدم قبول عکس این مورد، اصلا بذارید بنویسمش:






void key_set(int *svar,int eeprom *evar,char key)
{
switch(key)
{
case 24:
*svar=*evar;
break;
case 14:
*evar=*svar;
}
}


البته خود تابعم طولانی تره، خلاصش کردم که راحتتر بخونیدش
1.خب حالا اگه متغیری که به این تابع میدم از همین نوع int باشه مشکلی نیست، اما من چندین متغیر دارم، که بعضی int و بعضی char هستند، یا باید تابعی بسازم که دو تا خروجی داشته باشه، که بلد نیستم، یادم بدین اگه میشه، یا یه راهی نشونم بدین که از شر محدودیت نوع اشاره گر خلاص شم.

2.مسئله دومم هم اینه که خب حتما می دونید که برای اشاره به متغیر eeprom هم باید حتما متغیر اشاره گر هم تو eeprom باشه، خب اینجا این مشکل پیش میاد که خب من چنتا متغیر غیر eeprom یعنی sram هم دارم، حالا اگه بخوام اشاره گر هر دو رو با هم بخونه چیکار کنم؟

البته اگه بتونید سوال اول رو ج بدین بازم خوبه ممنونتون میشم
پیشاپیش از دوستی که ج میده تشکر می کنم
بازم ممنون
یاعلی

farhad_shiri_ex
یک شنبه 11 شهریور 1397, 08:02 صبح
با سلام خدمت دوستان گرامی
من یه تابع دارم که می خوام مسئله ای رو چک کنه و سپس در صورت قبول یک متغیر رو بریزه داخل متغیر دیگر، و در صورت عدم قبول عکس این مورد، اصلا بذارید بنویسمش:





void key_set(int *svar,int eeprom *evar,char key)
{
switch(key)
{
case 24:
*svar=*evar;
break;
case 14:
*evar=*svar;
}
}


البته خود تابعم طولانی تره، خلاصش کردم که راحتتر بخونیدش
1.خب حالا اگه متغیری که به این تابع میدم از همین نوع int باشه مشکلی نیست، اما من چندین متغیر دارم، که بعضی int و بعضی char هستند، یا باید تابعی بسازم که دو تا خروجی داشته باشه، که بلد نیستم، یادم بدین اگه میشه، یا یه راهی نشونم بدین که از شر محدودیت نوع اشاره گر خلاص شم.

2.مسئله دومم هم اینه که خب حتما می دونید که برای اشاره به متغیر eeprom هم باید حتما متغیر اشاره گر هم تو eeprom باشه، خب اینجا این مشکل پیش میاد که خب من چنتا متغیر غیر eeprom یعنی sram هم دارم، حالا اگه بخوام اشاره گر هر دو رو با هم بخونه چیکار کنم؟

البته اگه بتونید سوال اول رو ج بدین بازم خوبه ممنونتون میشم
پیشاپیش از دوستی که ج میده تشکر می کنم
بازم ممنون
یاعلی

اول سورس کدهایی که گذاشتید را در داخل tag های مناسب قرار بدید که بشه مشاهده کرد!
البته شاید پاسخ های من خیلی دقیق نباشه !
برای سوال اول می تونید از نوع *void هم استفاده کنید بجای نوع int و در زمان فراخوانی cast کنید. وچون تو C هست برای اینکه بتونید دوتا خروجی برای تابع تعریف کنید دوتا راه دارید
1- ارسال مرجع یک متغیر بیرونی به تابع و همچنین بازگشت یک اشاره گر از تابع پس یک ورودی رفرنس و یک خروجی اشاره گر
2- ارسال مرجع استراکچر به تابع و یا بازگشت یک اشاره گر از استراکچر

برای سوال دوم هم تا اونجایی که میدونم اشاره گرهای eeprom نحوه آدرس دهی شون با اشاره گرهای stack متفاوت و امکان دسترسی همزمان ندارند!

چون کدی که دارید برای میکرو کنترلر هست؟ بهتره تو بخش برنامه نویسی میکرو مطرح کنید!
این تالار مربوط به برنامه نویسی با c در سیستم عامل های ویندوز و لینوکس هست!