فائدة - كيفية كتابة برنامج بلغة c++



ما هو عامل التشغيل "->" في C++؟ (14)

انتبه

--> ليست مشغل. هو في الواقع اثنين من المشغلين المنفصلين ، -- و > .

رمز الشرطية decrements x ، أثناء إرجاع قيمة x الأصلية (غير decremented) ، ثم يقارن القيمة الأصلية مع 0 باستخدام العامل > .

لفهم أفضل ، يمكن كتابة البيان على النحو التالي:

while((x--) > 0)

https://code.i-harness.com

بعد قراءة الميزات المخفية والزوايا المظلمة لـ C ++ / STL على comp.lang.c++.moderated للدهشة تمامًا لأن المقتطف التالي تم تجميعه وعمله في كل من Visual Studio 2008 و G ++ 4.4.

هنا الرمز:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

أفترض أن هذا هو C ، لأنه يعمل في دول مجلس التعاون الخليجي كذلك. أين يتم تحديد هذا في المعيار ، ومن أين أتت؟


أو من أجل شيء مختلف تمامًا ... يتم عرض الشرائح x إلى 0

while (x --\
            \
             \
              \
               > 0)
     printf("%d ", x);

ليس رياضيا ، ولكن ... كل صورة ترسم ألف كلمة ...


الطريقة التقليدية التي نحدد بها الحالة في حين أن قوس العروة " () " وإنهاء الشرط داخل الأقواس " {} " ، لكن هذا -- & > هي طريقة يحددها المرء على الفور. على سبيل المثال:

int abc(){
    int a = 5
    while((a--) > 0){ // Decrement and comparison both at once
        // Code
    }
}

تقول ، decrement a و تشغيل الحلقة حتى الوقت أكبر من 0

طريقة أخرى كان يجب أن تكون مثل:

int abc(){
    int a = 5
    while(a > 0){
        // Code
        a = a -1 // Decrement inside loop
    }
}

في كلا الاتجاهين ، نفعل نفس الشيء ونحقق نفس الأهداف.


انها

#include <stdio.h>
int main(void){
     int x = 10;

     while( x-- > 0 ){ // x goes to 0

       printf("%d ", x);
     }

     return 0;
}

مجرد الفضاء يجعل الأشياء تبدو مضحكة ، -- decrements و > يقارن.


انها مزيج من اثنين من المشغلين. الأول -- هو decrementing القيمة و > هو التحقق من ما إذا كانت القيمة أكبر من المعامل الأيمن.

#include<stdio.h>

int main()
{
    int x = 10;

    while (x-- > 0)
        printf("%d ",x);

    return 0;
}

سيكون الناتج:

9 8 7 6 5 4 3 2 1 0            

تطيع C و C++ القاعدة "أقصى حدش". بنفس الطريقة يتم ترجمة b --- إلى (a--) - b ، في حالتك x-->0 يترجم إلى (x--)>0 .

ما تنص عليه القاعدة بشكل أساسي هو أن من اليسار إلى اليمين ، يتم تشكيل التعبيرات عن طريق أخذ الحد الأقصى من الأحرف التي ستشكل تعبيرًا صالحًا.


على أي حال ، لدينا "يذهب إلى" المشغل الآن. "-->" من السهل تذكرها كإتجاه ، و "بينما x يذهب إلى الصفر" هو معنى مستقيم.

علاوة على ذلك ، هو أكثر فعالية قليلاً من "for (x = 10; x > 0; x --)" على بعض الأنظمة الأساسية.


في الواقع ، x يتم decrementing ومع يتم التحقق من هذا الشرط. إنه ليس --> ، إنه (x--) > 0

ملاحظة: يتم تغيير قيمة x بعد التحقق من الشرط ، لأنه بعد decrementing. يمكن أيضًا حدوث بعض الحالات المشابهة ، على سبيل المثال:

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0

لماذا كل المضاعفات؟

الإجابة البسيطة على السؤال الأصلي هي:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x > 0) 
    {
        printf("%d ", x);
        x = x-1;
    }
}

هل نفس الشيء. لا أقول يجب عليك أن تفعل ذلك من هذا القبيل ، لكنه يفعل نفس الشيء وكان يمكن أن يجيب على السؤال في وظيفة واحدة.

x-- هو اختصار فقط لما ذكر أعلاه ، و > مجرد عامل عادي أكبر من operator . لا يوجد لغز كبير!

هناك الكثير من الناس يجعل الأشياء البسيطة معقدة في الوقت الحاضر ؛)


مهووس تمامًا ، لكنني سأستخدم هذا:

#define as ;while

int main(int argc, char* argv[])
{
    int n = atoi(argv[1]);
    do printf("n is %d\n", n) as ( n --> 0);
    return 0;
}

هذا هو بالضبط نفس

while (x--)
{
   printf("%d ", x);
}

للأرقام غير السالبة


هناك مسافة مفقودة بين -- و > . x آخر decremented ، أي ، decremented بعد التحقق من حالة x>0 ? .


يمكن أن يصل إلى الصفر بشكل أسرع في الاتجاه المعاكس:

int x = 10;

while( 0 <---- x )
{
   printf("%d ", x);
}

8 6 4 2

يمكنك التحكم في السرعة مع سهم!

int x = 100;

while( 0 <-------------------- x )
{
   printf("%d ", x);
}

90 80 70 60 50 40 30 20 10

؛)


-- هو مشغل decrement و > هو أكبر من المشغل.

يتم تطبيق المشغلين كجهاز واحد مثل --> .





standards-compliance