محمد حسن پزشکیان
عاشق امنیت و نفوذ ، رد تیم و دوستدار بزن بکش :)

تفاوت بین x++ و ++x در ++C چیست؟

در این مطلب میخوایم به صورت مختصر تفاوت x++ و ++x رو در زبان برنامه نویسی سی پلاس پلاس بررسی کنیم ، همونطور که میدونید در بحث Operator ها ما یه دسته داریم تحت عنوان عملگر های افزایشی یا (Increment Operators) و عملگر های کاهشی (Decrement Operators) که این دوتا میان و مقدار متغییری که داریم یه واحد زیاد/کم میکنن

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

# قبل هرچیز بگم که عملگر یا Operator علامتیه یا چیزیه که کار انجام میده مثل "+" یا "-" یا "=" و... ولی عملوند یا Operand اون چیزی که کار روش انجام شده ، مثل اعداد یا متغییر ها و ... ، مثلا 4=2+2 در اینجا اعداد میشن عملوند و علامتا میشن عملگر

مثلا در زبان پایتون اگر ما بخوایم به یه متغییر یه واحد اضافه کنیم ، میتونیم اینطوری عمل کنیم :

x = 2
x = x + 1
print (x)
------------
Console : 3

ولی برنامه نویس های حرفه ای اینطوری نمینویسن ، میان و اینطوری مینویسن :

x = 2
x += 1
print (x)
------------
Console : 3

این کد دقیقا عین کد بالا میاد و به مقدار x یه واحد اضافه میکنه

در زبان سی پلاس پلاس هم ما همین شرایط رو داریم ، مثلا میخوایم به یه متغییری یه واحد اضافه کنیم ، میتونیم به طور ساده که در مثال پایتون اشاره شد بنویسیم منتها بجای (x+=1) ما اینطوری مینویسیم (من دیگ بخش library و namespace و... رو نمینویسم) :

int x = 10;
cout << " the value of x is " << x << endl ;
int y = ++ x;
cout << " the value of x is " << x << endl ;
cout << "the value of y is " << y ;
cin.ignore();
------------
Console :
the value of x is 10
the value of x is 11
the value of y is 11 

در خط اول ما میاییم و یه متغییر عدد صحیح تعریف میکنیم که مقدارش 10 هست ، یه بار چاپش میکنیم ، حالا عمل افزایش رو انجام میدیم ، دوباره چاپش میکنیم ، میشه 11 و در نهایت نتیجه ریخته میشه تو متغییر y و اونم میشه 11

حالا به این شکل از کل توجه کنید :

int x = 10;
cout << " the value of x is " << x << endl ;
int y = x ++;
cout << " the value of x is " << x << endl ;
cout << "the value of y is " << y ;
cin.ignore();
------------
Console :
the value of x is 10
the value of x is 11
the value of y is 10

نتیجه متفاوت شد ، اینبار طبق روال اولش x شد 10 ، بعدش شد 11 ولی وقتی ما assign کردیم مقدار x رو به y نتیجه شد 10 و 11 نشد ، چرا ؟

x = 10;
y = ++x;

در این حالت وقتی عملگر قبل از عملوند میاد (مثبت ها قبل x میان) ، اول عمل انجام میشه بعد نتیجه داخل متغییر ریخته میشه ( یعنی قبل ریخته شدن مقدار داخل متغییر عمل افزایش یا کاهش انجام میشه) ، پس در اینجا x میشه 10 و y میشه 11 (اول x++ محاسبه میشه و بعد مقدار داخل y ریخته میشه)

منتها

x = 10;
y = x++;

اگر اول متغییر یا عملوند بیاد و بعد در ادامش مثبت یا عملگر بیاد ، اول مقدار داخل متغییر ریخته میشه بعد عمل افزایش یا کاهش انجام میشه ، در اینجا اولش x میشه 10 ، بعد که میاد مرحله بعد میبینه نوشته ++x پس قبل هرچیزی میاد و 10 رو میریزه تو y بعد میاد و یدونه اضافه میکنه به 10 و 11 میشه مقدار x

میتونید اینطوری برا خودتون نشونه گذاری کنید ، تو ++x چون x اول امده پس اول مقدار تو متغییر ریخته میشه ، بعد ++ اجرا میشه ، در x++ چون اول ++ امده پس اول عمل افزایش انجام میشه بعدش تو x ریخته میشه :)

# سازنده این زبان کلا از مثبت خوشش میامده ، اسمش شده ++c متغییر افزایشی x++ و ++x ، کامپایلر ++g ، اصلا فقط مثبت (+_+)

نکته ظریفی بود و قابل تامل ، اگر سوالی چیزی بود در خدمتم :)


محمد حسن پزشکیان
محمد حسن پزشکیان

عاشق امنیت و نفوذ ، رد تیم و دوستدار بزن بکش :)

کارشناس تست نفوذ سنجی ، علاقه مند به امنیت تهاجمی و رد تیمینگ | عضو انجمن بین المللی ورزش های رزمی کشور آلمان و دارای احکام بین المللی و داخلی کمربند مشکی در سبک های کیوکوشین ، هاپکیدو ، کیک بوکسینگ و چند تام قهرمانی کشوری

نظرات