#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;
}ممكن حد يشرح لي الكود التالي
أين ما لم تفهمه ؟
لأن في هذا الكود مواضيع عديدة جدا ً: المؤشرات ، عامل الموضع ،الدالة sizeof،التوابع ؟
يرجى التحديد.
ببساطه شديدة
الكود السابق يحتوى على دالة اسمها 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
بالتوفيق
