زبان برنامه نویسی سی/متغیرها: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
جزبدون خلاصۀ ویرایش
خط ۳:
مطابق با دانش برنامه نویسی یک « متغیر » یک یا چند واحد از خانه های حافظه ( موقت ) است که :
 
1 - دارای یک نام یا همان « '''شناسه''' » است که فقط با همان شناسه و از طریق آن می توان به آن متغیر دسترسی پیدا نمود ( حتی در صورتی که بخواهیم ، غیر مستقیم ، به محتوای آن توسط اشاره گراشاره‌گر دسترسی پیدا کنیم ، باید اشاره گراشاره‌گر را به نام یا همان شناسه متغیر اشاره دهیم )
 
2 - دارای محتوایی است که به آن '''مقدار''' یا موجودی آن متغیر می گوئیممی‌گوئیم
 
3 - در هر جای برنامه می تواینممی‌تواینم به صورت دستی مقدار جدیدی به آن بدهیم یا همان مقداری که دارد را دستخوش تغییر نمائیم و یا به صورت خودکار ، تغییر آن را واگذار کنیم به یک یا چند تابع ( مقدار آن قابل تغییر است ، مگر آنکه پیش از تعیین نوع داده از کلیدواژه const استفاده نموده باشیم )
 
اما در زبان سی ، شما موظف به تعیین نوع متغیر نیز می باشید . جهت سهولت در کار با داده ها دو نوع داده '''عددی''' و '''کاراکتری''' وجود دارند که متناسب با نیاز خود از آنها بهره می گیریدمی‌گیرید . همچنین متغیر های عددی در زبان سی درانواع طیفیمختلفی قرار می گیرنددارند که با توجه به کوچک یا بزرگ بودن یا اعشاری یا غیراعشاری بودن عدد شما ،باید تعیین باید گردند . ( گرچه امروزه با توجه به وجود حافظه های حجیم این نیاز کم رنگ تررنگ‌تر جلوه می نمایدمی‌نماید ، اما باید یاد بگیرید که همواره به اندازه نیاز خود ، نوع متغیر را تعریف کنید تا حافظه در همان اندازه اشغال گردد ) شما عموماً باید از متغیر های عددی استفاده نمائید تا بتوانید با رایانه ارتباط برقرار نمائید اما زمانی که صحبت از ارتباط شما با فرد است و میخواهید متنی را بنویسید یا ویرایش کنید و نمایش دهید به راحتی با وجود کاراکتر هاکاراکترها و رشته هارشته‌ها در زبان سی ، می توانید از اتلاف وقت خود برای تعیین و ایجاد ارتباط بین اعداد و کاراکتر هاکاراکترها جلویجلو گیری نمائید
 
اگر بخواهیم به زبان ساده ترساده‌تر بیان نمائیم و کمی مبحث داده هاداده‌ها و متغیر هامتغیرها را تشریح نمائیم باید اینگونه بگوئیم :
 
شما در برنامه نویسی باید متن قابل فهم توسط کامپایلر را بر روی یک فایل متنی بنویسید ، ذخیره کنید و سپس آن را تحویل کامپایلر ( یا مفسر ) بدهید. در این حین شما از قوانین دانش رایانه تبعیت خواهید نمود و دست کم باید تبعیت کنید تا خطایی رخ ندهد . در دانش رایانه که بخشی از دانش الکترونیک می باشد ، همان طور که در ابتدای فصل بدان اشاره نمودیم ، باید همواره جریانی ورود یابد و سپس دست خوش پردازش گردیده و در نهایت به خروجی ارسال گردد . طی برنامه نویسیبرنامه‌نویسی شما باید داده هاییداده‌هایی را ایجاد کنید ، داده ها را به یکدیگر یا به داده های سیستم عامل یا سخت افزارسخت‌افزار مرتبط نمائید و این داده هاداده‌ها را طی یک روال به خروجی برسانید که به آن برنامه می گوئیممی‌گوئیم . اما شاید بپرسید چرا نام متغیر را روی این داده ها گذارده اند ؟
 
فرض کنید میخواهید یک مرورگر وب را بنویسید . حتماً در مرورگرهای خود دیده ایددیده‌اید که عنوان یک صفحه وب بر روی جایگاه عنوان برنامه مرورگر شما نمایش داده می شودمی‌شود ( در گذشته بر روی نوار عنوان پنجره یا همان Title Bar نمایش داده میشدمی‌شد و امروزه در داخل Tab ) این عنوان را شما نمی توانیدنمی‌توانید پیش بینی کنید که چه خواهد بود ! یعنی اگر یک متن ثابت را قرار بدهید ، طبعاً کاربر برنامه شما نمی تواند عنوان صفحه وب را مشاهده نماید و اگر بخواهید در آن تغییری ایجاد کنید از کجا می دانید که باید چه بنویسید ؟ پاسخ اینست که شما نباید از یک متن ثابت استفاده کنید . بلکه باید درون یک رشته به واسطهکمک نشانه های فرمت کردنمتغیرها ، امکان ایجاد متنی را بدهید که به دستور شما ، متن داخل برچسب عنصر title در زبان html ( زبان عمده صفحات وب ) که همان عنوان صفحه وب می باشد را به جای متن رشته قرار دهد و در نهایت آن را به نمایش بگذارد . اگر مثال ساده تری بخواهیم بزنیم که مثال ما خارج از زبان سی نیز می باشدمی‌باشد این مثال را در نظر بگیرید :
 
شاید تا به حال به صفحاتی برخورده ایدبرخورده‌اید که در بدو ورود شما ، به واسطه مرورگر یک کادر باز نموده و از شما نام شما و مشخصات شما را می پرسد و هر آنچه که نوشتید را بر روی صفحه وب نمایش می دهد . در واقع تحت زبان javascript که زبان پویا نمودن صفحات وب می باشد ، نویسنده صفحه وب ، یک یا چند متغیر را تعریف می نمایدمی‌نماید ( به تعدادی که از شما اطلاعات بخواهد : نام ، سن ، شهر و ... ) هر کدام را داخل یک متغیر ذخیره می نمایدمی‌نماید و در نهایت با توجه به دستور درج آن در صفحه ، نام و مشخصات شما داخل صفحه وبی که مشاهده می نمائیدمی‌نمائید درج خواهد گردید . حال اگر وجود داده متغیر در برنامه نویسی نمی بودنمی‌بود ، آنگاه طراح صفحه مجبور می شد تا بنویسد : بازدیده کننده محترم !
 
پس شما باید بدانید که متغیر هامتغیرها علاوه بر اینکه این قابلیت را دارند که در هر جای برنامه با توجه به دستور مستقیم شما که به صورتیصورت نوشتاری ، داخل متن منبع شما وجود دارد تغییر کنند ، بلکه این قابلیت چشم گیرچشم‌گیر و موثر که التزام آن حتمی می باشد را دارند که : با توجه به ارتباطی که شما طی برنامه برای متغیر خود تعریف می نمائید ( که بیشتر از طریق تابع امکان پذیر است که بعدها در این کتاب به مفهوم آن خواهیم پرداخت ) و تعریف پویای آن ، تغییر کنند
 
اما این تغییر تنها در محتوای متغیر که همان مقدار و موجودی آن می باشدمی‌باشد امکان پذیر است و تغییر نام ( یا همان شناسه ) آن باید توسط خود شما و در داخل متن منبع انجام پذیرد ( متن را ویرایش کنید ) . تغییر نوع داده نیز امکان پذیر نمی باشدنمی‌باشد ، مگر به واسطه خود شما که نوع آن را تغییر دهید . شما زمانی که از یک کلیدواژه ایجاددایجاد کننده متغیر استفاده می نمائیدمی‌نمائید مجاز و مجبور به تعیین یک نام برای ایجاد متغیر می باشیدمی‌باشید . سپس مختارید در همان جا یا در ادامه برنامه به آن متغیر مقدار اولیه بدهید ، این مقدار می تواندمی‌تواند به دستور برنامه شما تغییر کند ، اما دقت کنید که کامپایلر نمی تواندنمی‌تواند مقدار به آن بدهد و این شما هستید که باید با دادن یک مقدار به متغییر پیش از استفاده از آن ، تعریفش نمائید .
 
اگر مقداری به یک متغیر ندهید و آن را بدون وجود مقدار در مرتبه اول نوشتن آن داخل متن منبع به همراه یک نام وارد کنید آن متغیر را '''اعلان''' نموده ایدنموده‌اید . در ادامه برنامه اگر قصد استفاده از آن متغیر را داشته باشید باید حتماً به آن متغیر در بدو کار، مقدار و موجودی داشتهاختصاص باشدبدهید و اگر نداشته باشد یا کامپایلر خطا خواهد گرفت و یا یک عدد تصادفی در آن قرار خواهد گرفت ( که به آن مقدار زباله می‌گوئیم ) که برنامه شما را بر هم می زندمی‌زند . به دادن محتوا به متغیر جهت ایجاد آن '''مقدار دهی اولیه''' می گوئیممی‌گوئیم . پس از مقدار دهی اولیه برای متغیر ، آن متغیر '''تعریف''' شده است و شما مجاز به استفاده از آن خواهید بود .
 
=== کار با متغیر ها ===
 
کلیدواژه های زبان سی را در مبخث آغازین کتاب نوشتیم . از این بین کلید، واژهکلید هایواژه‌های :
 
{{چپ‌چین}}
خط ۴۱:
enum
</source>
 
{{پایان چپ‌چین}}
 
جهت ایجاد متغیر های پایه به کار می روند . همچنین دو کلیدواژه '''signed''' و '''unsigned''' به ترتیب جهت تعیین اینکه عدد وارد شده برای مقدار متغیر ، دارای علامت ( منفی یا مثبت بودن عدد) می باشد یا خیر ، به کار می رود . زمانی که کلیدواژه های بالا را در متن منبع خود می نویسیدمی‌نویسید ، مجاز و مجبور به استفاده از یک نام دلخواه خواهید بود تا یک متغیر ایجاد کنید . اما فراموش نکنید که زبان سی ، یک زبان حساس به کوچک و بزرگی حروف می باشدمی‌باشد که اصطلاحاً به آن case sensitive می گویندمی‌گویند . بنابراین شما نمی توانید بنویسید Int یا INT و فقط مجاز به استفاده از شکل صحیح آن یعنی « int » می باشیدمی‌باشید . در مورد نام یا همان شناسه متغیر نیز قوانینی وجود دارد که یکی از آنها همین حساس بودن به کوچک یا بزرگ بودن حروف می باشدمی‌باشد . شما زمانی که نامی را برای یک متغیر انتخاب می کنید و می نویسید در دفعات بعدی که میخواهیدمی‌خواهید آن را در جای دیگر برنامه مورد استفاده قرار دهید ، حتماً باید دقیقاً کاراکتر به کاراکتر نام آن را همانند آنچه که برای انتخاب نامش استفاده کرده اید ، استفاده کنید و بنویسید . یعنی اگر نام آن را name گذاشته ایدگذاشته‌اید ، نمی توانیدنمی‌توانید در ادامه برنامه ، وقتی می خواهید آن را فرابخوانید بنویسید : Name ! در صورت این اشتباه شما ، کامپایلر از شما خطا خواهد گرفت .که Name تعریف نشده است
در انتخاب نام یک متغیر شما مجاز به استفاده از حروف کوچک a-z و حروف بزرگ A-Z و اعداد 9-0 و کاراکتر زیر خط ، یعنی « _ » می باشیدمی‌باشید ، به غیر از اینکه کاراکتر اول نامی که انتخاب می کنیدمی‌کنید نباید یک عدد یا کاراکتر زیر خط باشد . همانندمثلاً Name_05 یک نام معتبر است ، اما نمی توانید این نام را انتخاب کنید : 05Name
 
در انتخاب نام یک متغیر شما مجاز به استفاده از حروف کوچک a-z و حروف بزرگ A-Z و اعداد 9-0 و کاراکتر زیر خط ، یعنی « _ » می باشید ، به غیر از اینکه کاراکتر اول نامی که انتخاب می کنید نباید یک عدد یا کاراکتر زیر خط باشد . همانند Name_05 ، اما نمی توانید این نام را انتخاب کنید : 05Name
 
=== متغیر های عددی ===
 
از ابتدای کتاب یادآور گشتیم که بارهاچند بار استاندارد سی تعریف شده است ، اما علاوه بر آن کامپایلر هاکامپایلرها هر کدام اندازه مختص خود را برای متغیر هامتغیرها اختصاص می دهندمی‌دهند . مثلاً متغیری از نوع صحیح یعنی int در اولین استاندارد تنها یک بایت باید در حافظه جا اشغال می نمودمی‌نمود ، بعد هابعدها به دو بایت افزایش یافت .و با ایندر حال برخیحاضر کامپایلردر هاسیستم‌هایی اندازهبا هایپردازشگرهای دیگری۶۴ رابیتی اختصاص، مییک دهندint ،طبق مثلاًاستاندارد ، چهار بایت را باید اشغال نماید . با این حال برخی کامپایلرها اندازه‌های دیگری را اختصاص می‌دهند . ابتدا کامپایلر خود را تست کنید تا ببینید که چه قدر برای هر نوع متغیر اختصاص می دهد :
 
{{چپ‌چین}}
سطر ۷۷ ⟵ ۷۵:
{{پایان چپ‌چین}}
 
این دستور را دریک فایل 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 نوشته می شود و همان کلیدواژه اختصاصی ایجاد اعداد صحیح میمی‌باشد باشد، می نویسیممی‌نویسیم :
 
{{چپ‌چین}}
<source lang="C#">
 
int a = 15;
 
</source>
 
{{پایان چپ‌چین}}
 
اگر بخواهیم میتوانیم مقدار آن را بعدها نیز به آن اختصاص بدهیم . در اینجا متغیر a تعریف شده است اما اگر مقداری به آن نمی دادیمنمی‌دادیم ، آن را اعلان نموده بودیم ، مثل :
 
{{چپ‌چین}}
<source lang="C#">
 
int a;
 
</source>
 
{{پایان چپ‌چین}}
 
پس از اعلان یک متغیر ، برای دادن مقدار به آن یا استفاده از آن هرگز نباید دوباره نوع داده آن را بنویسیم ، یعنی اگر بخواهیم بعدها به a مقداری بدهیم می نویسیممی‌نویسیم : a = 15 یا مثلاً a = 8 . و اگر متغیر دیگری داشته باشیم با نام b می نویسیم : a - b و '''نباید''' از واژهکلیدواژه int برای استفاده از احضار متغیر خود دوباره استفاده نمائیم ( در مورد انواع متغیرهای دیگر نیز به همین شکل می‌باشد ) . همچنین نحوه ایجاد چند متغیر از یک نوع در یک خط و دادن مقدار به آنها به شکل زیر می باشد ( هر چند به مبتدی هامبتدی‌ها توصیه نمی شودنمی‌شود ) :
 
{{چپ‌چین}}
<source lang="C#">
 
int a, b, c, d = 5, 8, 16, 73;
 
</source>
 
{{پایان چپ‌چین}}
 
<big>تذکر :</big>
 
علامت کالن یعنی « , » یک عملگر می باشدمی‌باشد که وظیفه آن جدا کردن کدکدها ها می باشدمی‌باشد ، کاربرد آن در این قطعه کد برای جدا کردن نام متغیر هامتغیرها و همچنین مقادیر آنها بود . اگر آن را فراموش کنید ، توسط کامپایلر به صورت یکپارچه خوانده خواهد شد که اگر فاصله ایفاصله‌ای هم بین آنها باشد مطمئناً کامپایلر خطا خواهد گرفت . پس وجود آن ضروری می باشدمی‌باشد . همچنین علامت سمی کالن یعنی « ; » به معنی پایان دهنده و فاسخ می باشدمی‌باشد . وظیفه آن که در انتهای حکم می آیدمی‌آید ، پایان دادن به قطعهقطعه‌ای از کد و به اجرا گذاشتن آن می باشدمی‌باشد . این عملگر از زبان های اسمبلی سطح بالا توسط زبان سی به ارث برده شده است . بنابراین زمانی که شما یک سمی کالن را قرار می دهیدمی‌دهید ، هر آنچه که پیش از آن نوشته شده است به صورت مجزا به اجرا در می آیدمی‌آید که در اینجا یک متغیر را ایجاد می نمایدمی‌نماید و در صورت داشتن مقدار ، مقدار آن را داخل حافظه جای میدهدمی‌دهد . پس نوشتن غیر ضروری آن یک خطای بارز خواهد بود و توسط کامپایلر به شما گوشزد خواهد گردید . در ایجاد و استفاده عملیاتی از داده هاداده‌ها و همین طور در پایان توابع کتابخانه ای باید از علامت سمی کالن استفاده نمائید و وجود آن ضروری می باشد ولی استفاده غیر ضروری از آن منجر به خطا در کامپایل برنامه شما خواهد گردید
 
در جدول زیر انواع داده هایداده‌های عددی به همراه فضای اشغال شده در حافظه توسط آنها ( مطابق با استاندارد سی ) و بازه اعدادی که می توانیدمی‌توانید در آنها جای دهید ،برای سیستم‌های ۳۲ بیتی نوشته شده است :
 
{{چپ‌چین}}