زبان برنامه نویسی سی/عملگرهای یگانی

ویکی‎کتاب، کتابخانهٔ آزاد

عملگر افزایش که با دو علامت ( مثبت ) + به صورت ++ نوشته می‌شود و عملگر کاهش که با دو علامت ( منفی ) - به صورت -- نوشته می‌شوند عملگرهای یگانی نام دارند . چرا که می‌توانند و تنها بر روی یک عملوند ، عمل می‌کنند . عملوند این کاهش و افزایش باید یک شناسه باشد ( نه یک مقدار ) . عملگر افزایش ۱ واحد به عملوند خود اضافه می‌کند و عملگر کاهش ۱ واحد از عملوند خود می‌کاهد ؛ به جز اشاره‌گرها که همان طور که در موضوع اشاره‌گرها بیان نمودیم با عملگر افزایش ، به اندازه حجم اشاره‌گر در حافظه موقت به پیش می‌رود و به خانه‌های بعدی اشاره می‌کند و با عملگر کاهش به اندازه حجم اشاره‌گر به عقب باز می‌گردد . دقت کنید که گفتیم شناسه ؛ یعنی شما نمی‌توانید از عملگر کاهش و افزایش برای نام برچسب ساختمان‌ها ، اجتماع‌ها و شمارگان ( enum ) استفاده کنید ، همچنین این شناسه نمی‌تواند ، شناسه یک تابع باشد ( شما می‌توانید مقدار تابع را که بازگردانده می‌شود داخل یک متغیر ذخیره کنید و مقدار متغیر را افزایش یا کاهش دهید ، اما نمی‌توانید از عملگر کاهش و یا افزایش بر روی شناسه تابع استفاده کنید ) البته می‌توانید از عملگر افزایش و کاهش برای عمل بر روی شناسه متغیرهای شمارگان ( و نه برچسب آن ) استفاده کنید
مثل g که فرض کنیم یک متغیر صحیح است و می‌تواند به صورت g++ یا ++g نوشته شود

دقت کنید که شما عملگرهای یگانی افزایش و کاهش را می‌توانید هم پیش از نام شناسه قرار دهید و هم پس از نام شناسه ( ضمن اینکه این عملگر باید بدون فاصله نسبت به نام شناسه نوشته شود ) اما اگر پیش از شناسه آن را استفاده کنید ، زمانی که قرار است شناسه مقدارش مورد ارزیابی قرار بگیرد ، عملگر کاهش ، مقدار عملوند را کاهش می‌دهد و عملگر افزایش عملوند را افزایش می‌دهد ؛ در حالی که اگر پس از شناسه بنویسید ، مقدار شناسه حفظ می‌شود و مورد استفاده قرار گرفته و پس از اتمام خط کد ( که با عملگر پایان‌دهنده ، یعنی سمی کالن « ; » به پایان می‌رسد ) عملگر کاهش و افزایش عمل می‌کنند و مقدار عملوند خود را به ترتیب ۱ واحد کاهش می‌دهند و یا ۱ واحد افزایش می‌دهند

مثال :

#include<stdio.h>

int main()
{
int x = 5;
printf ("%d \n", x++);
printf ("%d \n", ++x);

return 0;
}

با کامپایل قطعه کد بالا با دو عدد 5 و 7 رو به رو می‌شوید . چرا که مقدار داده x مقدار 5 است ، که مقدار آن چاپ شده است و سپس یک واحد به مقدار آن افزوده می‌شود ( دقت کنید که عملگر افزایش ، پس از شناسه نوشته شده است ) . سپس تابع کتابخانه‌ای printf دوم می‌خواهد مقدار x را چاپ کند که مقدار آن حالا 6 است ، اما در اینجا عملگر افزایش ، پیش از عملوند خود ، یعنی داده x قرار دارد ، پس اول آن را افزایش می‌دهد و سپس چاپ می‌کند که عدد 7 را در خروجی خط‌دستوری مشاهده خواهیم نمود ( اگر پس از شناسه به کار می‌بردیم ، عدد 6 در خروجی ، نمایش داده می‌شد )

دقت کنید که در مورد اعداد اعشاری نیز ۱ واحد به قسمت صحیح آن افزوده می‌شود و نه قسمت اعشاری ، یعنی 4.6 می‌شود 5.6
نه 4.7 !

تمام مطالبی که در مورد عملگر افزایش ( ++ ) مثال زده و تشریح نمودیم ، در مورد عملگر کاهش ( -- ) نیز صادق است ؛ یعنی اگر در مثال بالا به جای عملگر افزایش ، از عملگر کاهش استفاده می‌کردیم ، ابتدا عدد 5 چاپ می‌شد و سپس عدد 3 . چرا که اولی پس از شناسه قرار دارد و ابتدا عدد چاپ می‌شد و پس از پایان خط ، یکی از آن کم می‌شد که می‌شد 4 و سپس به printf دوم می‌رسیدیم که عملگر کاهش ، پیش از شناسه قرار دارد ، از این روی ، یک واحد دیگر از آن کم می‌شد و عدد 3 به دست می‌آمد که در خروجی خط‌دستوری به نمایش در می‌آمد