السلام عليكم ورحمة الله
تحية طيبة للجميع
احتاج مساعدتكم في حل المسألة المرفقة في الموضوع
لغة البرمجة المستخدمة c++
وجزاكم الله خيرا
يُمنع حل الواجبات المنزلية.
أين محاولتك للسؤال ؟
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
شكرا أخي Sn@CkeR على الرد السريع
أنا فاهمة أن الدالة swap تقوم بالتبديل بين قيمتي المؤشرين a و b
ولكن لم أفهم معنى النجمتين عند استقبال المؤشرين في الدالة الأولى في السطر الأول
وفي السطر الثاني لماذا استخدم مؤشر temp بدلا من استخدام متغير عادي temp
مرفق محاولتي البسيطة في حل المسألة
وأرجو منكم مساعدتي في حلها
وجزاكم الله خيرا
تم تعديل هذه المشاركة بواسطة Thewhite Flower في 6 ديسمبر 2012 في 12:41
أحسنتِ ! محاولة جيدة :)
باختصار : الدالة الأولى تستقبل مؤشرين و تُبادل بين عناوينهما أما الدالة الثانية فتستقبل متغيرين و تُبادل بين قيمهما.
اقتباسلم أفهم معنى النجمتين عند استقبال المؤشرين في الدالة الأولى
النجمتين تعني مؤشر لمؤشر (Pointer to Pointer).
اقتباسفي السطر الثاني لماذا استخدم مؤشر temp بدلا من استخدام متغير عادي temp
لأن عملية التبديل ستحدث بين مؤشرين و بالتالي يجب أن يكون المتغير المؤقت مؤشر أيضا.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
شكرا استاذ Sn@CkeR على تجاوبك معي جزاك الله خيرا
لكن هناك نقطة لم افهمها وهي كيف يتم التحويل بين عنواني المؤشرين a و b في الدالة الأولى
مرفق مثال على الدالة الثانية فهل هي صحيحة؟
تم تعديل هذه المشاركة بواسطة Thewhite Flower في 6 ديسمبر 2012 في 13:44
سبب الخطأ هو أنك تتعاملين مع الــ Pointer to Pointer على أنه متغير عادي و هذا غير صحيح لأن المؤشر لمؤشر يحتوي على عنوان يُشير إلى قيمة :)
اقتباسهناك نقطة لم افهمها وهي كيف يتم التحويل بين عنواني المؤشرين a و b في الدالة الأولى
المتغير temp تأتي فائدته في تخزين عنوان المؤشر المعني.
عند تنفيذ هذه الخطوة :
int *temp =*a
سيصبح المؤشر temp يحمل عنوان a. و هذا الأمر :
*a = *b
يعني إسناد عنوان b إلى a. و الأمر التالي :
*b = temp
يعني إسناد عنوان temp إلى b (عنوان temp هو نفسه عنوان a).
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
شكرا استاذ Sn@CkeR
لكن ماهي القيم الصحيحة التي اضعها في المربعات في المثال على الدالة الأولى؟ وماهي القيم التي تستقبلها الدالة؟
هل هي نفسها في المثال على الدالة الثانية؟
اعطيني مثال على الدالة الأولى
اقتباسماهي القيم الصحيحة التي اضعها في المربعات في المثال على الدالة الأولى ؟
ليست قيم و إنما عناوين متغيرات.
اقتباساعطيني مثال على الدالة الأولى
تفضلي :
#include<stdio.h>
void swap(int ** a, int ** b) {
int *temp = *a;
*a = *b;
*b = temp;
}
int main() {
int n = -1, m = 3, *x = &n, *y = &m;
printf("BEFORE : \n");
printf("x : %p -> %d \n", x, *x);
printf("y : %p -> %d \n", y, *y);
swap(&x, &y);
printf("\nAFTER : \n");
printf("x : %p -> %d \n", x, *x);
printf("y : %p -> %d \n", y, *y);
return 0;
}C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
جزاك الله خير استاذ Sn@CkeR ماقصرت
كفيت ووفيت
جعلها الله في موازين حسناتك
كيف ارسلك النقاط ؟
اقتباسكيف ارسلك النقاط ؟
قومي بترشيح الإجابات التي أفادتك و سيتولى نظام التقييم مسألة توزيع النقاط.
بالتوفيق.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…