الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه dark_future في 7 أبريل 2010 · 2 رد · 803 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
#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;
}
#2

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

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

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

#3

ببساطه شديدة

الكود السابق يحتوى على دالة اسمها 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
amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

مواضيع مشابهة