زبان برنامه نویسی سی/متغیرها

ویکی‎کتاب، کتابخانهٔ آزاد
پرش به ناوبری پرش به جستجو
Gnome-go-last.svg
Gnome-go-first.svg

مطابق با دانش برنامه نویسی یک « متغیر » یک یا چند واحد از خانه های حافظه ( موقت ) است که :

1 - دارای یک نام یا همان « شناسه » است که فقط با همان شناسه و از طریق آن می توان به آن متغیر دسترسی پیدا نمود ( حتی در صورتی که بخواهیم ، غیر مستقیم به محتوای آن توسط اشاره گر دسترسی پیدا کنیم ، باید اشاره گر را به نام یا همان شناسه متغیر اشاره دهیم )

2 - دارای محتوایی است که به آن مقدار یا موجودی آن متغیر می گوئیم

3 - در هر جای برنامه می تواینم به صورت دستی مقدار جدیدی به آن بدهیم یا همان مقداری که دارد دستخوش تغییر نمائیم و یا به صورت خودکار ، تغییر آن را واگذار کنیم به یک یا چند تابع ( مقدار آن قابل تغییر است ، مگر آنکه پیش از تعیین نوع داده از کلیدواژه const استفاده نموده باشیم )

اما در زبان سی شما موظف به تعیین نوع متغیر نیز می باشید . جهت سهولت در کار با داده ها دو نوع داده عددی و کاراکتری وجود دارند که متناسب با نیاز خود از آنها بهره می گیرید . همچنین متغیر های عددی در زبان سی در طیفی قرار می گیرند که با توجه به کوچک یا بزرگ بودن عدد شما ، تعیین باید گردند . ( گرچه امروزه با توجه به وجود حافظه های حجیم این نیاز کم رنگ تر جلوه می نماید ، اما باید یاد بگیرید که همواره به اندازه نیاز خود متغیر را تعریف کنید تا حافظه در همان اندازه اشغال گردد ) شما عموماً باید از متغیر های عددی استفاده نمائید تا بتوانید با رایانه ارتباط برقرار نمائید اما زمانی که صحبت از ارتباط شما با فرد است و میخواهید متنی را بنویسید یا ویرایش کنید و نمایش دهید به راحتی با وجود کاراکتر ها و رشته ها در زبان سی می توانید از اتلاف وقت خود برای تعیین و ایجاد ارتباط بین اعداد و کاراکتر ها جلوی گیری نمائید

اگر بخواهیم به زبان ساده تر بیان نمائیم و کمی مبحث داده ها و متغیر ها را تشریح نمائیم باید اینگونه بگوئیم :

شما در برنامه نویسی باید متن قابل فهم توسط کامپایلر را بر روی یک فایل متنی بنویسید ، ذخیره کنید و سپس آن را تحویل کامپایلر ( یا مفسر ) بدهید. در این حین شما از قوانین دانش رایانه تبعیت خواهید نمود و دست کم باید تبعیت کنید . در دانش رایانه که بخشی از دانش الکترونیک می باشد ، همان طور که در ابتدای فصل بدان اشاره نمودیم ، باید همواره جریانی ورود یابد و سپس دست خوش پردازش گردیده و در نهایت به خروجی ارسال گردد . طی برنامه نویسی شما باید داده هایی را ایجاد کنید ، داده ها را به یکدیگر یا به داده های سیستم عامل یا سخت افزار مرتبط نمائید و این داده ها را طی یک روال به خروجی برسانید که به آن برنامه می گوئیم . اما شاید بپرسید چرا نام متغیر را روی این داده ها گذارده اند ؟

فرض کنید میخواهید یک مرورگر وب را بنویسید . حتماً در مرورگرهای خود دیده اید که عنوان یک صفحه وب بر روی جایگاه عنوان برنامه مرورگر شما نمایش داده می شود ( در گذشته بر روی نوار عنوان پنجره یا همان Title Bar نمایش داده میشد و امروزه در داخل Tab ) این عنوان را شما نمی توانید پیش بینی کنید که چه خواهد بود ! یعنی اگر یک متن ثابت را قرار بدهید ، طبعاً کاربر برنامه شما نمی تواند عنوان صفحه وب را مشاهده نماید و اگر بخواهید در آن تغییری ایجاد کنید از کجا می دانید که باید چه بنویسید ؟ پاسخ اینست که شما نباید از یک متن ثابت استفاده کنید . بلکه باید درون یک رشته به واسطه نشانه های فرمت کردن ، امکان ایجاد متنی را بدهید که به دستور شما ، متن داخل برچسب عنصر title در زبان html ( زبان عمده صفحات وب ) که همان عنوان صفحه وب می باشد را به جای متن رشته قرار دهد و در نهایت آن را به نمایش بگذارد . اگر مثال ساده تری بخواهیم بزنیم که مثال ما خارج از زبان سی نیز می باشد این مثال را در نظر بگیرید :

شاید تا به حال به صفحاتی برخورده اید که در بدو ورود شما به واسطه مرورگر یک کادر باز نموده و از شما نام شما و مشخصات شما را می پرسد و هر آنچه که نوشتید را بر روی صفحه وب نمایش می دهد . در واقع تحت زبان javascript که زبان پویا نمودن صفحات وب می باشد ، یک یا چند متغیر را تعریف می نماید ( به تعدادی که از شما اطلاعات بخواهد : نام ، سن ، شهر و ... ) هر کدام را داخل یک متغیر ذخیره می نماید و در نهایت با توجه به دستور درج آن در صفحه نام و مشخصات شما داخل صفحه وبی که مشاهده می نمائید درج خواهد گردید . حال اگر وجود داده متغیر در برنامه نویسی نمی بود ، آنگاه طراح صفحه مجبور می شد تا بنویسد : بازدیده کننده محترم !

پس شما باید بدانید که متغیر ها علاوه بر اینکه این قابلیت را دارند که در هر جای برنامه با توجه به دستور مستقیم شما که به صورتی نوشتاری داخل متن منبع شما وجود دارد تغییر کنند ، بلکه این قابلیت چشم گیر و موثر که التزام آن حتمی می باشد را دارند که : با توجه به ارتباطی که شما طی برنامه برای متغیر خود تعریف می نمائید ( که بیشتر از طریق تابع امکان پذیر است که بعدها در این کتاب به مفهوم آن خواهیم پرداخت ) و تعریف پویای آن ، تغییر کنند

اما این تغییر تنها در محتوای متغیر که همان مقدار و موجودی آن می باشد امکان پذیر است و تغییر نام آن باید توسط خود شما و در داخل متن منبع انجام پذیرد . تغییر نوع داده نیز امکان پذیر نمی باشد ، مگر به واسطه خود شما که نوع آن را تغییر دهید . شما زمانی که از یک کلیدواژه ایجادد کننده متغیر استفاده می نمائید مجاز و مجبور به تعیین یک نام برای ایجاد متغیر می باشید . سپس مختارید در همان جا یا در ادامه برنامه به آن متغیر مقدار اولیه بدهید ، این مقدار می تواند به دستور برنامه شما تغییر کند ، اما دقت کنید که کامپایلر نمی تواند مقدار به آن بدهد و این شما هستید که باید با دادن یک مقدار به متغییر پیش از استفاده از آن ، تعریفش نمائید .

اگر مقداری به یک متغیر ندهید و آن را بدون وجود مقدار در مرتبه اول نوشتن آن داخل متن منبع وارد کنید آن متغیر را اعلان نموده اید . در ادامه برنامه اگر قصد استفاده از آن متغیر را داشته باشید باید حتماً آن متغیر در بدو کار مقدار و موجودی داشته باشد و اگر نداشته باشد یا کامپایلر خطا خواهد گرفت و یا یک عدد تصادفی در آن قرار خواهد گرفت که برنامه شما را بر هم می زند . به دادن محتوا به متغیر جهت ایجاد آن مقدار دهی اولیه می گوئیم . پس از مقدار دهی اولیه برای متغیر ، آن متغیر تعریف شده است و شما مجاز به استفاده از آن خواهید بود .

کار با متغیر ها[ویرایش]

کلیدواژه های زبان سی را در مبخث آغازین کتاب نوشتیم . از این بین کلید واژه های :

char
int
short
long
float
double
long long int
long double
enum

جهت ایجاد متغیر های پایه به کار می روند . همچنین دو کلیدواژه signed و unsigned جهت تعیین اینکه عدد وارد شده برای مقدار متغیر دارای علامت منفی یا مثبت بودن عدد می باشد یا خیر ، به کار می رود . زمانی که کلیدواژه های بالا را در متن منبع خود می نویسید ، مجاز و مجبور به استفاده از یک نام دلخواه خواهید بود تا یک متغیر ایجاد کنید . اما فراموش نکنید که زبان سی ، یک زبان حساس به کوچک و بزرگی حروف می باشد که اصطلاحاً به آن case sensitive می گویند . بنابراین شما نمی توانید بنویسید Int یا INT و فقط مجاز به استفاده از شکل صحیح آن یعنی « int » می باشید . در مورد نام یا همان شناسه متغیر نیز قوانینی وجود دارد که یکی از آنها همین حساس بودن به کوچک یا بزرگ بودن حروف می باشد . شما زمانی که نامی را برای یک متغیر انتخاب می کنید و می نویسید در دفعات بعدی که میخواهید آن را در جای دیگر برنامه مورد استفاده قرار دهید ، حتماً باید دقیقاً کاراکتر به کاراکتر نام آن را همانند آنچه که برای انتخاب نامش استفاده کرده اید ، استفاده کنید و بنویسید . یعنی اگر نام آن را name گذاشته اید ، نمی توانید در ادامه برنامه ، وقتی می خواهید آن را فرابخوانید بنویسید : Name ! در صورت این اشتباه شما ، کامپایلر از شما خطا خواهد گرفت .

در انتخاب نام یک متغیر شما مجاز به استفاده از حروف کوچک a-z و حروف بزرگ A-Z و اعداد 9-0 و کاراکتر زیر خط ، یعنی « _ » می باشید ، به غیر از اینکه کاراکتر اول نامی که انتخاب می کنید نباید یک عدد یا کاراکتر زیر خط باشد . همانند Name_05 ، اما نمی توانید این نام را انتخاب کنید : 05Name

متغیر های عددی[ویرایش]

از ابتدای کتاب یادآور گشتیم که بارها استاندارد سی تعریف شده است ، اما علاوه بر آن کامپایلر ها هر کدام اندازه مختص خود را برای متغیر ها اختصاص می دهند . مثلاً متغیری از نوع صحیح یعنی int در اولین استاندارد تنها یک بایت باید در حافظه جا اشغال می نمود ، بعد ها به دو بایت افزایش یافت . با این حال برخی کامپایلر ها اندازه های دیگری را اختصاص می دهند ، مثلاً چهار بایت . ابتدا کامپایلر خود را تست کنید تا ببینید که چه قدر برای هر نوع متغیر اختصاص می دهد :

#include<stdio.h>

int main()
{

printf(sizeof(char), "\n");
printf(sizeof(int), "\n");
printf(sizeof(short), "\n");
printf(sizeof(float), "\n");
printf(sizeof(double), "\n");
printf(sizeof(long), "\n");
printf(sizeof(long long), "\n");
printf(sizeof(long double), "\n");

return 0;

}

این دستور را دریک فایل c ذخیره کنید و سپس آن را کامپایل کرده و خروجی را اجرا کنید ( بهتر است از طریق ترمینال آن را اجرا نمائید تا پنجره زود بسته نشود ) تا ببینید که هر نوع متغیر چه فضایی را مطابق با تعریف کامپایلر شما اشغال می نماید . زمانی که یک بایت اشغال می گردد 8 بیت برای ما در نظر گرفته می شود تا از 0 و 1 انباشته گردد . یعنی از 00000000 آغاز می گردد و تا 11111111 ادامه می یابد که در مبنای دهدهی می شود : 0 تا 255 که یعنی 256 عدد را شامل می شود که می شود : 2 به توان 8 . بدیهیست در صورت اشغال دو بایت این مقدار می شود 2 به توان 16 . عدد 0 در زبان سی و در بسیاری از زبان های دیگر جزء اعداد مثبت محسوب می شود . بنابراین اگر عدد شما علامت دار باشد ( که به صورت پیش فرض به همین شکل می باشد ، مگر آنکه با استفاده از کلیدواژه unsigned ، آن را بدون علامت کنید )

زمانی که یک متغیر یک بایت را اشغال می کند و علامتی ندارد ، 256 عدد را می تواند در خود جای دهد که همان طور که گفته شد از 0 آغاز می گردد و تا 255 ادامه می یابد ، یعنی شما مجاز به قرار دادن عددی بزرگ تر از عدد 255 در چنین متغیری نمی باشید ( هر چند اینها متغیر های پایه هستند و شما می تواند متغیر های خودتان را در زبان سی به کمک کلیدوژاه های دیگر و فایل های سرآیند ایجاد کنید و یا اندازه نوع متغیر ها را تغییر دهید ) اما اگر نوع داده علامت دار باشد ، از آنجایی که گفتیم عدد 0 ، عددی مثبت محسوب می شود ، بازه ما از 128- تا 127 خواهد بود ؛ چرا که 128 عدد از 256 عدد که نصف آن می باشد اعداد منفی ما هستند و از 0 تا 127 که می شود 128 عدد ، اعداد مثبت ما می باشند .

در ایجاد متغیر ها می توان دو گونه عمل کرد : یکی اینکه هر متغیر را ، حتی اگر از یک نوع باشند در خط های جداگانه ایجاد نمود و هم اینکه آنها را به صورت متوالی نوشت و با هم ایجاد کرد و حتی می توان در همان خط ، تک تک آنها را مقدار دهی نمود . در ایجاد یک متغیر از نوع صحیح یا integer که به صورت int نوشته می شود و همان کلیدواژه اختصاصی ایجاد اعداد صحیح می باشد می نویسیم :

int a = 15;

اگر بخواهیم میتوانیم مقدار آن را بعدها نیز به آن اختصاص بدهیم . در اینجا متغیر a تعریف شده است اما اگر مقداری به آن نمی دادیم ، آن را اعلان نموده بودیم ، مثل :

int a;

پس از اعلان یک متغیر ، برای دادن مقدار به آن یا استفاده از آن هرگز نباید دوباره نوع داده آن را بنویسیم ، یعنی اگر بخواهیم بعدها به a مقداری بدهیم می نویسیم : a = 15 یا مثلاً a = 8 . و اگر متغیر دیگری داشته باشیم با نام b می نویسیم : a - b و نباید از واژه int دوباره استفاده نمائیم . همچنین نحوه ایجاد چند متغیر از یک نوع در یک خط و دادن مقدار به آنها به شکل زیر می باشد ( هر چند به مبتدی ها توصیه نمی شود ) :

int a, b, c, d = 5, 8, 16, 73;

تذکر :

علامت کالن یعنی « , » یک عملگر می باشد که وظیفه آن جدا کردن کد ها می باشد ، کاربرد آن در این قطعه کد برای جدا کردن نام متغیر ها و همچنین مقادیر آنها بود . اگر آن را فراموش کنید ، توسط کامپایلر به صورت یکپارچه خوانده خواهد شد که اگر فاصله ای هم بین آنها باشد مطمئناً کامپایلر خطا خواهد گرفت . پس وجود آن ضروری می باشد . همچنین علامت سمی کالن یعنی « ; » به معنی پایان دهنده و فاسخ می باشد . وظیفه آن که در انتهای حکم می آید ، پایان دادن به قطعه از کد و به اجرا گذاشتن آن می باشد . این عملگر از زبان های اسمبلی سطح بالا توسط زبان سی به ارث برده شده است . بنابراین زمانی که شما یک سمی کالن را قرار می دهید ، هر آنچه که پیش از آن نوشته شده است به صورت مجزا به اجرا در می آید که در اینجا یک متغیر را ایجاد می نماید و در صورت داشتن مقدار ، مقدار آن را داخل حافظه جای میدهد . پس نوشتن غیر ضروری آن یک خطای بارز خواهد بود و توسط کامپایلر به شما گوشزد خواهد گردید . در ایجاد و استفاده عملیاتی از داده ها و همین طور در پایان توابع کتابخانه ای باید از علامت سمی کالن استفاده نمائید و وجود آن ضروری می باشد ولی استفاده غیر ضروری از آن منجر به خطا در کامپایل برنامه شما خواهد گردید

در جدول زیر انواع داده های عددی به همراه فضای اشغال شده در حافظه توسط آنها ( مطابق با استاندارد سی ) و بازه اعدادی که می توانید در آنها جای دهید ، نوشته شده است :

بازه عددی حجم اشغال شده ( به بایت ) نوع داده
-32,768 —— 32,767 2 signed short , short , short int , signed short int , int
0 —— 65,535 2 unsigned short , unsigned short int , unsigned int
-2,147,483,648 —— 2,147,483,647 8 signed long , signed long int , long , long int
0 —— 4,294,967,295 8 unsigned long , unsigned long int
-9,223,372,036,854,775,808 —— 9,223,372,036,854,775,807 16 long long , long long int , signed long long , signed long long int
0 —— 18,446,744,073,709,551,615 16 unsigned long long , unsigned long long int
-1.17549435 * (10^-38) —— 3.40282347 * (10^+38) 4 float
2.2250738585072014 * (10^-308) —— 1.7976931348623157 * (10^+308) 8 double
3.4 * (10^-4932) —— 1.1 * (10^4932) 10 long double

متغیر هایی که از نوع اعشاری هستند ، همانطور که از اسمشان پیداست ؛ جهت ذخیره اعداد اعشاری به کار می روند . بنابراین اگر قصد ایجاد یک عدد اعشاری را ندارید ، بیهوده از آنها استفاده ننمائید و تنها زمانی دست به ایجاد متغیر هایی از نوع عدد اعشاری بزنید که به آنها نیاز داشته باشید ، آن هم دقیقاً متناسب با مقدار مورد نیاز خود . متغیر های float دقت کم تری نسب به double و در نهایت نسبت به long double دارند . دقت کنید که برخی کامپایلر های قدیمی نوع داده long long یا همان long long int را به رسمیت نمی شناسند و یا حتی long double را ، ابتدا از به رسمیت شناخته شدن این نوع داده ها توسط کامپایلر خود ، پیش از استفاده از آنها ، اطمینان حاصل نمائید . همچنین به صورت اختیاری برخی کامپایلر ها از نوع داده long long double پشتیبانی می نمایند که می تواند در محیط آن کامپایلر ها از این نوع داده استفاده نمائید ، اما یک نوع داده استاندارد نیست .

کاملاً دقت داشته باشید که انواع داده ای float و double و long double به صورت پیش فرض علامت دار هستند و بازه عددی آنها در کوچک ترین و بزرگ ترین اعدادی که می توانند ذخیره کنند را در جدول نوشتیم که همین مقدار با قوانینی که بیان گردید در بازه اعداد مثبت نیز قرار می گیرد و شما نمی توانید آنها را بر خلاف نوع داده ای مثل int بدون علامت نمائید .

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

https://en.wikipedia.org/wiki/IEEE_floating_point

متغیر های کاراکتری[ویرایش]

به واسطه استفاده از کلیدواژه char شما مجاز و مجبور به استفاده از یک داده کاراکتری در متن برنامه سی خود هستید . همانند متغیر های عددی ، متغیر کاراکتری نیز باید یک نام داشته باشد و شما می توانید اول آن را اعلان کرده و سپس تعریف نمائید . ولی در داخل هر داده کاراکتر تنها یک کاراکتر که می تواند هر کدام از کاراکتر های ANSI مطابق با استاندارد 98/99 باشد و مطابق با آخرین استاندارد زبان سی یعنی C11 شما می توانید هر کدام از کاراکتر های Unicode را ذخیره نمائید . اما اکثر کامپایلر ها ، هنوز با آخرین استاندارد سی ، به روز رسانی نشده اند . هر کاراکتری را که میخواهید در متغیر خود ذخیره نمائید باید داخل دو علامت سینگل کوت قرار دهید . مانند : '0' یا 'A' یا '*' که هر کدام یک کاراکتر از کاراکتر های کاراکترست ANSI هستند . کاراکترست های بسیاری موجود هستند که در ابتدای کتاب نیز بدین مبحت اشاره نمودیم . اما شما برای کار با زبان سی باید تا به صورت مطلوبی به کاراکترست ANSI مسلط باشید . ANSI نام مستعار کاراکترست اسکی موسسه استاندارد سازی آمریکاست ، بنابراین نام اصلی آن ASCII می باشد که دارای 128 کاراکتر می باشد .

در هر کاراکترست ، مقدار متناظر کاراکتری برای هر مقدار باینری موجود می باشد . بنابراین زمانی که شما کاراکتر عدد هشت را به صورت '8' در داخل یک متغیر کاراکتری ذخیره می نمائید ، مقدار آن 56 خواهد بود و نه 8 . یعنی زمانی که شما با اعداد کار می کنید ، واسطه ای در کار نیست و عدد 8 شما اگر مبنای 10 ذخیره و پردازش گردد ، همان 8 است . اما زمانی که می خواهید کاراکتر 8 را در یک متغیر کاراکتری ذخیره نمائید ، این مقدار یک عدد نیست بلکه به مثابه یک حرف و به عبارت بهتر یک کاراکتر است که در درون متغیر ذخیره می گردد .

نوع داده کاراکتری به شما کمک می کند تا در مواقعی که نیاز به نوشتن و خواندن متن در برنامه خود دارید از اتلاف وقت جلوگیری گردد . در صورت عدم وجود این نوع داده شما خودتان موظف بودید تا متون را به مقادیر عددی بنویسید و وارد کنید و در نهایت تحویل بگیرید . نحوه ایجاد یک کاراکتر :

char word = 'W';

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

enum

متغیر enum یک متغیر پایه نیست . بدین معنا که نمی تواند نوع مستقلی از متغیر را ایجاد کند ، بلکه روشی است برای ایجاد متغیر هایی از نوع صحیح که ثابت مقداری هستند و به تعداد تعیین شده توسط برنامه نویس ایجاد می شوند که به صورت خودکار و متوالی مقدار دهی می گردند . بعد از نوشتن کلیدواژه enum شما مجاز هستید تا یک نام یا همان شناسه نیز بنویسید که مختص همان enum می باشد و این به شما کمک می کند تا اگر از چند enum استفاده نموده اید ، طی احضار آنها در برنامه بتوانید آنها از یکدیگر تفکیک نمائید و بدیهی است که در صورت عدم داشتن نام یا شناسه ، قادر به تفکیک آنها نخواهید بود . همچنین ایجاد شناسه شما را قادر می سازد تا اگر تصمیم به ایجاد متغیر هایی که میخواهید مقدار آنها را تغییر دهید را از روی آن enum ( یا همان متغیر شمارگان ) ایجاد کنید ، بتوانید این کار را انجام دهید . پس از نوشتن شناسه جفتی از کروشه های باز و بسته باید موجود باشند که در آن دست کم یک نام یا همان شناسه نوشته گردد . روش مقدار دهی C برای متغیر های شمارگان یا همان enum بدین روال است که از مقدار 0 برای اولین شناسه استفاده می نماید و در شناسه های بعدی یک واحد مثبت به مقدار قبلی اضافه می نماید .

شما مجازید تا برای هر یک از شناسه ها مقدار بدهید ولی اگر مثلاً فقط برای یکی از آنها مقدار 20 بدهید ، شناسه بعدی مقدار 21 خواهد گرفت و همچنین دقت کنید که نوع متغیر های enum صحیح علامت گذاری شده می باشد و شما می توانید مقادیر منفی را نیز وارد نمائید اما قادر به وارد کردن مقادیر اعشاری نیستید . شناسه ها را همواره باید با علامت کالن ( , ) از یکدیگر جدا نمائید و همانند ایجاد هر متغیر دیگری در پایان از علامت سمی کالن ( ; ) استفاده نمائید.

مثال :

enum fruit { grape, cherry, lemon, kiwi } apple=kiwi;

در اینجا مقدار grape مقدار عددی 0 احتساب می گردد و سپس cherry مقدار 1 ، lemon مقدار 2 , kiwi مقدار 3 ؛ این مقادیر غیر قابل تغییر در ادامه برنامه خواهند بود . اما مقدار apple قابل تغییر می باشد که مقدار اولیه تعیین شده برای آن 3 خواهد بود . با کمک شناسه enum می توان علاوه بر بعد از کروشه بسته می توان در ادامه برنامه ، متغیر هایی ایجاد نمود که همانند متغیر های صحیح دیگر ، مقدار آنها نیز قابل تغییر است :

enum fruit mango;

نحوه ثابت کردن یک متغیر

در مبحث ثابت ها بیان نمودیم که یک متغیر را می توان ثابت مقداری نمود . بدین معنا که مقدار آن پس از تعیین شدن ، در ادامه برنامه قابل تغییر نمی باشد . برای این منظور نیز از کلیدواژه const استفاده می نمائیم . اکنون که نحوه اعلان و تعریف متغیر ها را مشاهده نمودید می توانیم مثالی برای نحوه تعریف یک متغیر ثابت بزنیم تا به صورت ملموس ، آشنا گردید . مثال :

const int a = 8;

کلیدواژه const را پیش از کلیدواژه int نوشته و سپس به آن مقدار دهی اولیه نمودیم ، اما نکته اصلی اینجاست که پس از تعیین مقدار برای آن نمی توانیم در جای دیگری از برنامه مجدداً به آن مقدار بدهیم یا متغیر a را در یک تابع قرار دهیم که بخواهد مقدار آن را تغییر دهد . در این صورت کامپایلر خطا خواهد گرفت

نکته مهم[ویرایش]

یک نکته در مورد مقدار دهی به متغیر ها حائز اهمیت زیادی می باشد و آن اینکه علاوه بر مقدار متناسب با هر متغیر که شما می توانید آن را داخل متغیر خود جای دهید ، شما قادر به تخصیص یک متغیر دیگر و یا یک تابع به عنوان مقدار و موجودی متغیر خود هستید . اولین شرط این است که مقداری که متغیر جایگذاری شده دارد باید با نوع متغیر شما متناسب باشد . مثلاً اگر متغیر b را داخل متغیر a می گذارید ( به عنوان مقدار و موجودی متغیر a تعریف می کنید ) باید مقداری که b دارد از نوع متغیر a باشد . مثلاً یک متغیر کاراکتری را نمی توانید به عنوان مقدار و موجودی یک متغیر صحیح تعریف کنید . شرط دوم نیز همانند شرط اول است ولی در مورد تابعی است که شما می خواهید آن را به عنوان مقدار و موجودی یک متغیر استفاده کنید . مثلاً متغیر a یک متغیر صحیح int است ، اگر می خواهید مقدار آن را یک تابع بنویسید تا خروجی آن به عنوان مقدار و موجودی متغیر a قرار بگیرد ، باید خروجی تابع حتماً یک عدد صحیح باشد

در ادامه باید گفت که برخی از مقادیر در برخی از کامپایلر ها به یکدیگر ، قابل تبدیل هستند . برای این منظور باید دفترچه راهنمای کامپایلر خود را مطالعه کنید . ولی این تبدیل کاملاً منطقی است و بدیهیست شما هرگز قادر نخواهید بود یک حرف را داخل یک متغیر صحیح قرار بدهید . اما برخی از کامپایلر ها زمانی که با یک عدد اعشاری رو به رو می شوند که به عنوان مقدار یک متغیر صحیح تعیین شده ، به جای خطا گرفتن از شما ، قسمت اعشاری آن را نادیده می گیرند ! پس بهتر است اگر میخواهید کمی با خیال راحت در این کامپایلر ها برنامه بنویسید ، نکات ضروری نحوه کامپایل آن را با دقت مطالعه کنید