• 0
malhajri2009

ممكن حد يشرح لي الكود التالي

سؤال

#include <iostream>
using namespace std;

void increase (void* data, int psize)
{
if ( psize == sizeof(char) )
{ char* pchar; pchar=(char*)data; ++(*pchar); }
else if (psize == sizeof(int) )
{ int* pint; pint=(int*)data; ++(*pint); }
}

int main ()
{
char a = 'x';
int b = 1602;
increase (&a,sizeof(a));
increase (&b,sizeof(b));
cout << a << ", " << b << endl;
return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

أين ما لم تفهمه ؟

لأن في هذا الكود مواضيع عديدة جدا ً: المؤشرات ، عامل الموضع ،الدالة sizeof،التوابع ؟

يرجى التحديد.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ببساطه شديدة

الكود السابق يحتوى على دالة اسمها increase تاخذ متغير سؤاء كان عدد صحيح int او متغير حرفى char وتقوم بزيادته

فمثلا لو اخذت 1 سوف تحوله الى 2

ولو اخذت a سوف تحولها الى b

مع مراعاة ان تخزن القيم فى متغيرات من نوع مناسب char , int

كيف يتم ذلك ؟:

اولا يتم ارسال pointer للمتغير حتى اقوم بالتعديل فيه بحريتى فى الدالة increase

ثم احاول ان اتعرف على نوع المتغير من خلال استخدام الخاصية التى تتبع كل متغير وهى حجمه الذى يحتاجه فى الذاكرة ومن خلال ان اقوم

بعمل مقارنة بين حجم المتغير ,sizeof(a) و sizeof(char) فان الناتج لو تساوى اذا هما من نفس النوع

اذا المتغير المرسل كان من النوع X

اذا اطبق عليه العمليات المراد عملها عليه . فى حالتنا يقوم بزيادة واحد صحيح على المتغير ++

وهكذا بالنسبة لل int

كيفية استدعاء الدالة increase

اولا يجب ان اقوم بارسال variable reference لهذه الدالة حتى تستقبله فى pointer من خلال &a

والمدخل الثانى هو الحجم والذى يمكن ان اجده كما ذكرت من خلال الامر sizeof(a) واقوم بارساله والدالة تستقبله على هيئة متغير عددى فى psize

بالتوفيق

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .