السلام عليكم
قمت بكتابة هذا الموضوع الجديد لأن الأسئلة أصبحت مستقلة عن فحوى الموضوع الأصلي (الأسئلة ترتكز على الدالة فقط و خصوصا المؤشرات !)
كود الدالة :
bool isNumber(const char* str)
{
char *pMove = const_cast<char*>(str);
while(*pMove)
if (*pMove < 0x30 || *pMove > 0x39)
return false;
else
pMove++;
return true;
}خلاصة الموضوع :
أنا : ما معنى هذا السطر و ما الهدف منه !؟
char *pMove = const_cast<char*>(str);
محمد علاء الدين : حيث أن str هى مؤشر لثابت نصي لذا لا يمكن تغيير قيمة str (حيث من الممكن ان يكون str يشير لقيمة literal) و بالتالى اقوم بإستخدام const cast للحصول على قيمة المؤشر داخل متغير pMove حتى استطيع تغيير قيمة ذلك المؤشر بالزياده لاحقا.
أنا : أرجوا منك توضيح الأجزاء ذات اللون الأحمر مع شكري لك مقدما :)
ملاحظة : لا أعرف ما هو const cast ! :blush:, يا ريت لو تكون الإجابة باللغة العربية و بدون مواقع أجنبية !
____________________________________________
أنا : لم أفهم شرط حلقة التكرار :
while(*pMove)
محمد علاء الدين : معنى هذا الشرط انه يتم تنفيذ الكود طالما أن *pMove لا يساوى الصفر و ذلك لأن الصفر فى هذا المكان يعنى false اى تسبب فى انتهاء الحلقه بالإضافه ان الصفر يعنى انتهاء النص.
أنتظر إجابتكم على الأسئلة التي بالأعلى ولكن سأضيف بعض التعليقات على كلام الأستاذ محمد علاء الدين حسب فهمي و أريدكم أن تصححوا لي هذه التعليقات :
السبب وراء استخدامك لـ const cast (مع أني لا أعرفه !) هو أن str عبارة عن سلسلة حرفية ثابتة و لا يمكن لأي مؤشر أن يشير إليها !, لأن المؤشر إذا كان يشير لهذه السلسة فهذا معناه انه يمكننا تغيير "قيم خاناتها" أو "حروفها" اعتمادا على تحريك المؤشر و تغيير قيمته في كل مرة !, هل هذا التفسير صحيح !؟
اقتباسمعنى هذا الشرط انه يتم تنفيذ الكود طالما أن *pMove لا يساوى الصفر و ذلك لأن الصفر فى هذا المكان يعنى false اى تسبب فى انتهاء الحلقه بالإضافه ان الصفر يعنى انتهاء النص.
هل أفهم من كلامك أن :
الخانة الأخيرة من السلسلة الحرفية يكون فيها الرمز \0 و إذا كان المؤشر عند هذه الخانة فإن قيمته ستكون الكود آسكي المقابل للرمز السابق و تساوي 0, هل هذا صحيح !؟
ألا يمكننا استخدام سلسلة حرفية غير ثابتة مما يمكننا من إسنادها لمؤشر حرفي بشكل طبيعي بدل أن نستخدم سلسلة حرفية ثابتة !؟, انظر الكود :
bool isNumber(char* str)
{
char *pMove = str;
while(*pMove)
if (*pMove < 0x30 || *pMove > 0x39)
return false;
else
pMove++;
return true;
}تحياتي.

