إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

لغز

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [نقاش] لغز

    السلام عليكم
    كيفكم يا شباب؟
    لم قسم البرمجة نايم ؟؟
    المهم يوجد لغز محير .
    لن أطيل, اللغز بلغة السي عن المؤشرات

    كود PHP:
    #include <stdio.h>
    int
    main 
    (int argcchar *argv[])
    {
        
    int a[4] ;
        
    printf("%p\n",a);
        
    printf("%p\n",1);
        
    printf("%p\n",&a);
        
    printf("%p\n",(&1));
        return 
    0;

    بفرض ان المؤشر a عند البايت t من الذاكرة هل يمكنك توقع الارقام التي ستطبع مع أبداء السبب طبعا من غير تشغيل البرنامج
    بالتوفيق

  • #2
    لم يتم اسناد قيمة ابتدائية للمصفوفة a على الأرجح تحوي قيم عشوائية
    السطرين الاول و الثاني لا أعرف
    قد يكون قيمة العنصر الأول في المصفوفة و قيمة العنصر الثاني
    أو عنوان العنصر الأول و عنوان العنصر الثاني t+4 بحيث قياس int 4 بايت
    الثالث و الرابع عنوان الذاكرة t و الرابع t+1

    تعليق


    • #3
      لا أخي زاهر الاجابة غير صحيحة في بعض الاجزاء.

      مانوع &a ؟

      تعليق


      • #4
        يبدو انه لا يوجد مجيب
        الحل:
        بفرض ان a وهو من نوع pointer to int عند العنوان t
        سيقوم بطباعة الأتي:
        t
        t + sizeof(int) *1
        t
        t + sizeof(int) *4
        هل من مفسر للإجابة؟

        تعليق


        • #5
          تقصد
          السطر الأول و الثالث يطبع مؤشر المصفوفة
          السطر الثاني يأخذ المؤشر يجمع بايت واحد يطبع
          السطر الرابع يأخذ المؤشر يجمع عنصر واحد من عناصر المصفوفة ثم يطبع
          لا احب ال c على كل حال

          تعليق


          • #6
            ^^
            الثاني يطبع بعد المؤشر ب4 بايت وهو طول ال int
            الرابع يضيف علي المؤشر طول المصفوفة لان &a هو من نوع مؤشر لمصفوفة طولها اربعة لذا عندما نقول + 1 هو يضيف واحد من طول النوع الذي يشير له لذا هو يقفز للبايت الذي بعد أخر بايت في المصفوفة
            لغز أخر ولكن نريد الهمة يا شباب
            هل
            a[5] = [5]a
            ولماذا؟ :D
            بالتوفيق

            تعليق


            • #7
              فهمت .
              أما عن سؤالك الثاني لا اعرف، ولكن لا اعتقد انه يمكن وضع [5] قبل المتحول ذلك خطأ Syntax بالنسبة لي.

              تعليق


              • #8
                متأسف أخطات في الكتابة المفترض a[5] == 5[a]
                شكرا أخي زاهر علي اهتمامك لا اعلم سبب امتناع باقي الأخوة عن المشاركة
                الاجابة أن المعامل [] في الarrays يقوم بالأتي:
                a[5] = *(a+5)
                5[a] = *(5+a)
                -
                المعامل * هو معامل يقوم بإحضار مابداخل العنوان المعطي له ومن فوق نجد ان القيمتين متساويتين.
                وكأنك تقول اجمع 5 علي العنوان a او أجمع a علي العنوان 5.
                بالتوفيق
                التعديل الأخير تم بواسطة محمد أبوالنور; الساعة 15-12-2010, 09:07 PM.

                تعليق

                يعمل...
                X