انواع متغیر در زبان C – به زبان ساده با مثال و کد
انواع متغیر در زبان C شامل متغیرهای محلی، سراسری، خودکار، خارجی و ایستا میشود. متغیر به مکانهای نامگذاری شدهای در حافظه گفته میشود که برای ذخیره داده یا اطلاعات استفاده میشوند. این مکانها با کمک نامهای مرتبط به هر کدام، قابل دسترسیاند، و مقدار درون آنها قابل تغییر است. متغیرها معمولا از نوع داده خاصی تعریف شدهاند. بنابراین کامپایلر زبان میداند که به هر متغیر چه مقدار از حافظه باید اختصاص داده شود. برنامه نویسان حرفهای این زبان برای مدیریت هرچه بهتر برنامهها و کدهای خود باید به شکل بسیار خوبی بر روی کار با انواع متغیر در زبان C مسلط شوند. زیرا متغیرهای زبان C دارای قواعد و شرایط خاصی هستند که در همه زبانها صدق نمیکند.
در این مطلب از مجله فرادرس، به صورت کامل و جامع به بررسی انواع متغیر در زبان C پرداختهایم. تمام اطلاعات لازم از قبیل روش تعریف متغیر، مقداردهی اولیه، واکشی دادههای ذخیره شده و انواع مختلف قابل اختصاص به آن را همراه با مثالهای کدنویسی شده نمایش دادهایم. ابتدا با تعریف متغیر شروع کرده و بعد از بررسی انواع آن، سینتکسهای مربوط به پیادهسازی هر کدام از نوعها را نمایش دادیم. در نهایت هم به بیان قواعد نامگذاری و چند مورد از ویژگیهای مهم متغیرهای زبان C پرداختهایم.
انواع متغیر در زبان C چیست؟
انواع متغیر را در زبان C میتوان در ۵ دسته کلی تقسیم کرد. در فهرست زیر این ۵ نوع مختلف را معرفی کردهایم.
- «محلی» (Local)
- «سراسری» (Global)
- «خودکار» (Automatic)
- «خارجی» (External)
- «ایستا» (Static)
زبان برنامهنویسی C یکی از مشهورترین و قدرتمندترین زبانهای برنامهنویسی است که عمر طولانی هم دارد. برای آموزش کار با این زبان میتوانید فیلم آموزش برنامه نویسی C به صورت جامع و با نکات کاربردی را از فرادرس مشاهده کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در ادامه، انواع متغیرهای زبان C را بررسی میکنیم.
متغیرهای محلی در C
در زبان C، متغیر محلی به متغیرهایی گفته میشود که فقط در داخل بلوک محل تعریفشان قابل دسترسی هستند. این مسئله به معنای آن است که متغیرهایی با نام یکسان که در بلوکها یا توابع متفاوت از هم تعریف شدهاند به عنوان موجودیتهای مجزا از هم نیز در نظر گرفته میشوند. متغیرهای محلی در زبان C میتوانند در طول اجرای مجموعه دستورات خاص مربوط به بلوک خود، دادهها را ذخیره کنند، بدون اینکه بر روی سایر قسمتهای برنامه تاثیر بگذارند.
سینتکس تعریف متغیرهای محلی در زبان C
سینتکس مربوط به تعریف متغیرهای محلی در زبان C مانند سینتکس متغیرهای معمولی است.
1datatype variableName;
تنها تفاوت مربوط به محلی است که متغیر محلی تعریف میشود. برای مثال با توجه به کد نوشته شده پایین درک بهتری از مفهوم متغیر محلی بدست میآورید.
1#include <stdio.h>
2
3int main() {
4int a = 25; // local variable
5
6if (a == 25) {
7int c; // another local variable
8printf("The value of a is: %d\n", a);}
9
10//printf("Value of c is: %d", c);
11
12return 0;
13}
بعد از اجرای کد بالا، خروجی به شکل The value a is: 25 در کنسول به کاربر نمایش داده میشود.
تمام مراحل اجرایی مثال کدنویسی شده بالا را در فهرست زیر به صورت مرتب توضیح دادهایم.
- درون تابع main() ، متغیر محلی تعریف کردهایم و مقدار 25 را به آن اختصاص دادیم.
- محوطه فعالیت این متغیر فقط درون تابع main() است. بنابراین از این متغیر نمیتوان درون هیچ تابع یا بلوک کد دیگری استفاده کرد که خارج از تابع main() تعریف شده است.
- در مرحله بعد عبارت شرطی if را برای بررسی جمله مقایسهای a == 25 به کار بردهایم.
- در این عبارت شرطی، اگر شرط برقرار باشد، کدهای درون بلاک if اجرا شده و مقدار درون متغیر a به همراه پیام رشتهای تعریف شده در کنسول چاپ میشوند.
- این اتفاق نشان میدهد که متغیر محلی a از هرجایی در درون تابع main() قابل دسترسی است.
- درون عبارت شرطی If متغیر دیگری به نام c را نیز بدون مقداردهی تعریف کردیم. این متغیر فقط برای عبارت If محلی است. یعنی اینکه فضای فعالیت آن به عبارت If محدود شده و خارج از بلوک مربوط به این عبارت قابل دسترسی نیست.
- خارج از عبارت شرطی کامنتی قرارداده شده که برای چاپ مقدار متغیر c در کنسول قابل استفاده است.
- اگر این خط کد را از حالت کامنت خارج کرده و برنامه را اجرا کنیم، با پیغام خطای «error: ‘c’ was not declared in this scope» روبهرو خواهیم شد. زیرا c فقط در داخل محوطه عبارت شرطی If قابل دسترسی است.
متغیرهای سراسری در C
متغیرهای سراسری یا Global بیرون از همه توابع تعریف میشوند و در هر بلوک کد و تابعی قابل دسترسی هستند. این متغیرها تا پایان کار برنامه باقی میمانند. استفاده از متغیرهای سراسری در برنامههای زبان C میتواند دیباگ کردن را سادهتر کند. زیرا مقدار آنها به صورت دست نخورده باقی میماند. حتی اگر برای دیباگکردن برنامه Breakpoint تنظیم کرده باشیم هم در کار متغیر سراسری اختلالی ایجاد نمیشود.
سینتکس تعریف متغیرهای سراسری در زبان C
سینتکس مربوط به تعریف متغیرهای سراسری هم مانند متغیرهای محلی زبان C و شبیه به سینتکس متغیرهای معمولی است.
1datatype variableName;
تنها تفاوت مربوط به محلی است که این متغیرها در آن تعریف میشوند. در تکه کد زیر مفهوم متغیر سراسری را به کار بردهایم.
1}#include<stdio.h>
2
3int x = 15; // global variable
4
5void fun(){
6int y=25; // local variable
7printf("%d %d",x,y);
8}
9
10int main(){
11
12fun();
13
14return 0;
بعد از اجرای کد بالا، خروجی زیر در کنسول نمایش داده میشود.
15 25
تمام مراحل اجرایی مثال کدنویسی شده بالا را در فهرست زیر به صورت مرتب توضیح دادهایم.
- در ابتدا بیرون از هر تابع یا بلوک کدی، متغیری به نام x را با نوع عدد صحیح تعریف کرده و مقدار 15 را به آن اختصاص دادیم. این متغیر محدوده فعالیت سراسری دارد. یعنی اینکه در همه بخشهای برنامه قابل دسترسی و استفاده است.
- سپس تابعی به نام fun() را تعریف کردیم که مقدار void در برنامه نویسی - به معنی هیچ - را برمیگرداند.
- درون تابع - با نوع void - متغیری دیگری را به نام y با نوع عدد صحیح تعریف کرده و مقدار 15 را به آن نیز اختصاص دادیم. این متغیر فقط محدود به فعالیت درون آن تابع است. بنابراین فقط درون تابع fun() قابل دسترسی است.
- سپس با استفاده از تابع printf() مقدار درون این متغیرها را با فاصله فضای خالی نمایش دادهایم.
- در تابع main() تابع fun() را بدون هیچ آرگومانی فراخوانی میکنیم.
- در نهایت مقادیر را در کنسول چاپ میکنیم. این به معنای آن است که متغیرهای سراسری از همه جای برنامه قابل دسترسی هستند.
متغیرهای خودکار در C
در زبان برنامهنویسی C، در زمان اجرای تابع یا بلوکی از کدها متغیرهای خودکار نیز میتوانند ایجاد شوند. به محض اینکه تابع یا بلوک کد به کار خود پایان دهد، این توابع هم به صورت خودکار غیب میشوند. این متغیرها فقط درون بلوکهای محل تعریف خود مرئی هستند. اگر آن بلوک کد دوباره اجرا شود، نمونه جدیدی از این متغیر به صورت خودکار ایجاد شده و باز هم با پایان یافتن کار بلوک کد، ناپدید میشود.
این مسئله به معنای آن است که هربار وارد این محدوده کد یا تابع میشویم، متغیر خودکاری با همان نام اما مقدار متفاوت میتواند در آنجا وجود داشته باشد. بنابراین نباید به حالت قبلی این متغیر اتکا کنیم. زیرا هربار که در طول اجرای برنامه نمونه جدیدی از در آن محدوده ایجاد میشود، شاید شامل محتوی جدیدی نیز باشد.
سینتکس تعریف متغیرهای خودکار در زبان C
سینتکس مربوط به تعریف متغیرهای خودکار هم مانند متغیرهای محلی زبان C و شبیه به سینتکس متغیرهای معمولی است.
1datatype variableName;
تنها تفاوت مربوط به محلی است که این متغیرها در آن تعریف میشوند. در تکه کد زیر مفهوم متغیر خودکار را به کار بردهایم.
1#include <stdio.h>
2
3int main() {
4int x; // automatic variable
5
6for (x = 0; x <= 3; x++) {
7printf("Value of x: %d\n", x);
8}
9
10return 0;
11}
بعد از اجرای کد بالا، خروجی زیر در کنسول نمایش داده میشود.
Value of x: 0 Value of x: 1 Value of x: 2 Value of x: 3
در فهرست زیر، تمام مراحل اجرایی مثال کدنویسی شده بالا را به صورت مرتب توضیح دادهایم.
- در تابع main() متغیر x را از نوع int و بدون مقداردهی اولیه ایجاد کردهایم. متغیر x از نوع متغیرهای خودکار است. همه متغیرهای محلی به صورت پیشفرض از نوع متغیرهای خودکار هستند.
- سپس از حلقه for همراه با x به عنوان متغیر شمارنده آن استفاده میکنیم. به متغیر x مقدار 0 تخصیص داده شده است.
- حلقه پیمایش خود را از x=0 شروع کرده و تا زمانی که x<=3 است به چرخش ادامه میدهد. یعنی اینکه حلقه به اندازه چهار بار پیمایش میکند.
- در هر پیمایش حلقه، برنامه مقدار x را به همراه جمله توصیفی مرتبط با آن چاپ کرده و سپس مقدار x به اندازه ۱ واحد با کد x++ افزایش پیدا میکند.
- بعد از بیشتر شدن شمارنده حلقه x از مقدار 3 ، گردش حلقه متوقف میشود. زیرا در این حالت شرط حلقه دیگر برقرار نیست. پس تابع main() با کد return 0 اجرای خود را به پایان میرساند.
- پس از به پایان رسیدن اجرای تابع main() ، همه متغیرهایی که درون آن ایجاد شدهاند، از محدوده کاری خود خارج شده و به صورت خودکار نابود میشوند.
متغیرهای خارجی در C
متغیرهای خارجی بیرون از تابع و با استفاده از کلمه کلیدی extern ایجاد میشوند. این متغیرها درون فایل یکسان یا حتی چندین فایل شامل کدهای زبان C و توسط همه توابع قابل دسترسی هستند.
- وقتی که با استفاده از کلمه کلیدی extern، متغیر خارجی تولید میکنیم، در واقع به کامپایلر میگوییم که این متغیر در جای دیگری از برنامه تعریف و ساخته شده است.
- حافظه مربوط به متغیر در زمان تعریف کردن به آن اختصاص داده شده است، نه در زمان ساخت آن.
- متغیرهای خارجی زبان C، محدوده کاری سراسری دارند. بنابراین هر تابعی میتواند به آنها به همان صورت تعریف شده دسترسی داشته باشد.
- این متغیرها معمولا زمانی استفاده میشوند که چند تابع یا فایل مختلف نیاز به استفاده از متغیرهای یکسانی دارند.
سینتکس تعریف متغیرهای خارجی در زبان C
تعریف این نوع از متغیرها اندکی با تعریف متغیرهای معمولی تفاوت دارد. نکته اصلی در استفاده کلمه کلیدی extern است.
1extern datatype variableName;
در سینتکس بالا کلمه کلیدی extern، مشخص میکند که متغیر مورد نظر در جایی به غیر از محدوده برنامه تعریف شده است. به طور کلی توسعهدهندگان، متغیر خارجی را در یکی از فایلهای .c ایجاد میکنند. سپس سایر فایلها با استفاده از کلمه extern میتوانند به آن دسترسی داشته باشند.
در کادر زیر، برنامه سادهای را با زبان C نوشتهایم که به درک بهتر مفهوم این نوع از متغیرها کمک میکند. فرض کنیم که فایلی به نام extern_var.c ایجاد کردهایم. این فایل برای تعریف متغیرهای خارجی به کار برده میشود.
1// Definition of the external variable
2int c; // This allocates storage for the variable
در فایل دوم به نام main.c، متغیر خارجی را تعریف کرده و از آن استفاده میکنیم.
1#include <stdio.h>
2
3// Declaration of external variable
4extern int c;
5
6void func() {
7printf("In func(): c = %d\n", c);
8}
9
10int main() {
11c = 90; // Assign a value to the external variable
12printf("In main(): c = %d\n", c);
13
14func(); // Call the function that also uses the external variable
15
16return 0;
17}
در واقع در کادر بالا با استفاده از کلمه کلیدی extern به برنامه میگوییم که متغیر تعریف شده c از نوع متغیرهای خارجی است. یعنی در فایل یا جای دیگری به دنبال تعریف این متغیر بگردد و بعد از اتمام کار برنامه محتوی حافظه آن را نابود نکند.
بعد از اجرای کد بالا، خروجی زیر در کنسول نمایش داده میشود.
In main(): c = 90 In func(): c = 90
تمام مراحل اجرایی مثال کدنویسی شده بالا را در فهرست زیر به صورت مرتب توضیح دادهایم.
- در ابتدا درون فایل extern_var.c متغیر c را ایجاد میکنیم. در این فایل به متغیر c حافظه اختصاص داده میشود. این متغیر به معنای واقعی از نوع متغیرهای سراسری است.
- سپس درون فایل main.c برای تعریف کردن متغیر c از کلمه کلیدی extern استفاده میکنیم. این کار به کامپایلر خبر میدهد که متغیر مورد نظر در فایل دیگری - یعنی همان فایل extern_var.c - وجود دارد.
- بعد از آن، تابع func() را تعریف میکنیم. این تابع با استفاده از دستور printf() مقدار متغیر c را در کنسول نمایش میدهد.
- سپس در تابع main()، متغیر c را با عدد 90 مقداردهی کرده و دوباره این متغیر را با استفاده از دستور printf() در کنسول چاپ میکنیم.
- در ادامه تابع func() را فراخوانی میکنیم. فراخوانی این تابع باعث چاپ مقدار متغیر c به همراه پیغام توصیفی طراحی شده میشود.
- همینطور که در خروجی دیده میشود، متغیر خارجی c بین توابع main()و func() به اشتراک گذاشته شده است. هر دوی این تابعها میتوانند به مقدار متغیر c دسترسی داشته باشند و آن را تغییر دهند.
در نتیجه، روال کلی کار متغیر خارجی، به این صورت است که چندین فایل .c مختلف میتوانند به متغیر یکسانی دسترسی داشته و آن را تغییر دهند. در زمان کار با کامپایلرهای آنلاین میتوان هر دو فایل بالا را ترکیب و به صورت کد یکسانی اجرا کرد. دقیقا مانند کاری که برای متغیرهای سراسری انجام میگیرد.
1#include <stdio.h>
2
3// Global variable definition
4int c;
5
6void func() {
7printf("In func(): c = %d\n", c);
8}
9
10int main() {
11c = 90; // Assign a value to the global variable
12printf("In main(): c = %d\n", c);
13
14func(); // Call the function that also uses the global variable
15
16return 0;
17}
متغیرهای ایستا در C
متغیرهای ایستا با استفاده از کلمه کلیدی static تعریف میشوند. این متغیرها مقدار خود را در طول فراخوانی توسط تابع حفظ میکنند. در زبان C متغیرهای ایستا هم میتوانند محلی باشند، یعنی اینکه فقط درون توابعی استفاده شوند که تعریف شدهاند و هم میتوان این متغیرها را به صورت جهانی تعریف کرد، یعنی اینکه در سراسر برنامه قابل استفاده هستند. بر عکس متغیرهای معمولی، مقدار این متغیرها در طول فراخوانیهای متعدد تغییر نمیکند.
سینتکس تعریف متغیرهای ایستا در زبان C
سینتکس تعریف متغیرهای خارجی در زبان C برعکس متغیرهای معمولی در ابتدای کد نیاز به استفاده از کلمه کلیدی static دارد.
1static datatype var_name;
در سینتکس بالا کلمه کلیدی static نشانگر این است که این متغیر مقدار خود را در طول فراخوانیهای متعدد حفظ خواهد کرد.
در نمونه کد پایین روش استفاده از این متغیر را پیادهسازی کردهایم.
1#include <stdio.h>
2
3static int a = 0; //Declaring & initializing static variable
4
5void increment() {
6a++;
7printf("Result of increment operation is %d\n", a);}
8
9void decrement(){
10a--;
11printf("Result of decrement operation is %d\n", a);}
12
13int main(){
14
15increment();
16decrement();
17
18return 0;
19}
بعد از اجرای کد بالا، خروجی زیر در کنسول نمایش داده میشود.
Result of increment operation is 1 Result of decrement operation is 0
در فهرست زیر، تمام مراحل اجرایی مثال کدنویسی شده بالا را به صورت مرتب توضیح دادهایم.
- ابتدا متغیر ایستای a را از نوع int ایجاد کرده و مقدار 0 را به آن اختصاص دادهایم.
- سپس دو تابع Void به نامهای increment() و decrement() را تعریف کردهایم. که به ترتیب مقدار متغیر a را به اندازه ۱ واحد افزایش و کاهش میدهند.
- این توابع مقدارهای بهروزرسانی شده را با استفاده از دستور printf() در خروجی نمایش میدهند.
- در تابع main() ابتدا تابع increment() و سپس تابع decrement() را فراخوانی میکنیم.
- همینطور که در خروجی نشان داده میشود، متغیر ایستا در طول فراخوانیهای مختلف، مقدار خود را حفظ میکند.
به طور خلاصه، با اینکه متغیر a در این فایل متغیر محلی محسوب میشود اما مقدار جدید خود را بر اثر عملیات مختلف، حفظ میکند. این متغیر برای زمانهایی خوب است که بخواهیم مقدار خاصی را در میان اجرای چندین تابع مختلف حفظ کنیم.
آموزش برنامه نویسی با زبان C
زبان برنامهنویسی C، زبان برنامهنویسی سطح بالایی است که در دهه 1970 توسط «دنیس ریچی» (Dennis Ritchie) و در «آزمایشگاه بل» (Bell Labs) توسعه داده شد. C یکی از زبانهای برنامهنویسی پراستفاده و تاثیرگذار در تاریخ برنامهنویسی است و به عنوان زبان پایه برای سیستم عاملهای مختلف شناخته میشود. حتی بسیاری از دیگر زبانهای برنامه نویسی نیز با کمک زبان C توسعه داده شدهاند. به همین دلیل معمولا جزو اولین زبانهایی است که در دانشگاهها به دانشجویان تازه وارد آموزش داده میشود.
هنوز هم این زبان جایگاه خود را در بین برنامهنویسان حفظ کرده است. مخصوصا در برنامههای بسیار تخصصی که با سختافزار کار میکنند. سرعت بسیار بالای C باعث شده که حتی بعضی از کتابخانههای زبان پایتون توسط آن توسعه داده شوند. به همین دلیل است که فرادرس تلاش کرده تا مجموعه آموزش غنی و حرفهای را برای این زبان فراهم کند تا علاقهمندان به برنامهنویسی به شکل سریعتر و بهتری مهارتهای آن را فرا بگیرند. در پایین چند مورد از فیلمهای آموزشی زبان C را معرفی کردهایم. در صورت تمایل با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی رفته و از فیلمهای بیشتری نیز دیدن کنید.
- فیلم آموزش برنامه نویسی C به صورت جامع و با نکات کاربردی با فرادرس
- فیلم آموزش رایگان معرفی اجزای سازنده یک برنامه C با فرادرس
- فیلم آموزش رایگان آرایه ها در زبان برنامه نویسی C با فرادرس
- فیلم آموزش پروژه محور C درباره پیاده سازی بازی Snake در فرادرس
سینتکس مربوط به تعریف انواع متغیر در زبان C
برای تعریف کردن متغیرهای زبان C لازم است که از سینتکس خاصی پیروی کنیم. در غیر این صورت با خطا روبهرو شده و برنامه یا کلا کار نمیکند و در صورت کارکرد هم عملکرد صحیحی نخواهد داشت.
در کادر زیر، سینکس خام عملیات تعریف متغیر را پیادهسازی کرده و پارامترهای آن را در ادامه توضیح دادهایم. در صورتی که با پارامترها آشنایی کافی ندارید، پیشنهاد میکنیم که مطلب پارامتر در برنامه نویسی چیست؟ توضیح کاربردها به زبان ساده را از مجله فرادرس مطالعه کنید.
1data_type variable_name;
همینطور که میبینید سینتکس مربوط به تعریف انواع متغیر در زبان C شامل کلمه کلیدی ثابتی نیست. بلکه از دو بخش پارامتر کاملا مجزا از هم تشکیل شده است. در ادامه این پارامترها را توضیح دادهایم.
- بخش اول data_type : پارامتر data_type نشانگر نوع مقدار یا دادهای است که باید در متغیر مورد نظر ذخیره شود. این پارامتر معمولا از کلمات کلیدی مانند مانند int برای نوع عدد صحیح، «float» برای اعداد اعشار یا اعداد حاوی ممیز شناور، «char» برای کاراکترها و غیره تشکیل شده است.
- بخش دوم variable_name : پارامتر variable_name به شناسه یا نام یکتایی اشاره دارد که برای متغیر مورد نظر انتخاب میکنیم.
چیزی که در بالا دیدیم، سینتکس پایه برای تعریف متغیر است. در ادامه این قسمت، تمام جنبههای دیگر تعریف، ساخت و مقداردهی اولیه متغیرها را بررسی کردهایم. اما در ابتدا چند تکه کد کوچک را به عنوان مثالهای سادهای از تعریف متغیر در زبان C نمایش دادهایم.
1int age;
2char letter;
3float pi;
در کادر بالا سه متغیر مختلف را تعریف کردهایم که هر کدام از خط کدها را به ترتیب توضیح میدهیم.
- در خط اول متغیری از نوع Integer را با نام age تعریف کردیم.
- در خط دوم متغیری از نوع Character را با نام letter تعریف کردیم. این متغیر میتواند حروف الفبا را ذخیره کند.
- در خط سوم متغیری از نوع عدد «با ممیز شناور» (Floating-Point) را با نام pi تعریف کردیم. این متغیر میتواند اعدادی با بخش اعشاری مانند «۳.۱۴۱۵۹۲» را ذخیره کند.
فرایند ساخت متغیر در برنامه های زبان C
فرایند ساخت متغیر در برنامههای زبان C و خواندن دادههای درون آن متغیر را میتوان به سه مرحله زیر تقسیم کرد.
- تعریف متغیر در زبان C
- ساخت متغیر در زبان C
- مقداردهی متغیر در زبان C
در ادامه مطلب، هر سه بخش بالا را با بیان جزئیات به صورت واضح بررسی کردهایم.
تعریف و ساخت انواع متغیر در زبان C
تا به اینجای کار با سینتکس مربوط به تعریف متغیر در زبان C آشنا شدیم. هدف اصلی از تعریف متغیر این است که به کامپایلر زبان درباره وجود متغیر تعریف شده برای ذخیره دادهها اطلاع رسانی کنیم.
- در این فاز همین اشاره به نام متغیر و نوع آن برای کامپایلر کافی است. کامپایلر با کمک این اطلاعات کافی و بدون نیاز به جزئیات بیشتر میتواند فرایند کامپایل کردن کدها را به پیش ببرد.
- به محض اینکه کامپایلر علامت مورد نظر را دریافت کند، جایگاهی را برای آن متغیر در «جدول نماد» (Symbol Table) ایجاد میکند.
توجه: در استانداردهای قدیمی ANSI مربوط به زبان C - بخصوص تا قبل از C99 و C11 - همه متغیرها باید در اول برنامه تعریف میشدند. با اینکه در استانداردهای جدید زبان C این قانون انعطافپذیرتر شده است، هنوز بیشتر برنامهنویسان ترجیح میدهند که متغیرهای خود را در بالا و همان ابتدای برنامه تعریف کنند.
در زمان تعریف متغیر در زبان C میتوانیم با استفاده از «توصیف کنندهها» (Qualifiers) اطلاعات اضافی و بیشتری - نسبت به نوع و نام متغیر - را نیز فراهم کنیم. در چنین مواردی سینتکس مربوط به تعریف متغیر در زبان C به شکل زیر میشود.
1qualifier data_type variable_name;
در کادر بالا، مولفههای data_type و variable_name مانند همان پارامترهایی هستند که در سینتکس مربوط به تعریف متغیر معرفی کرده بودیم. اما عبارت qualifier به سایر توصیفکنندههایی اشاره میکند که اطلاعات اضافی را درباره هر متغیر و صفات آن فراهم میکنند.
- برای مثال، به منظور اشاره به متغیرهای ثابت میتوان از کلمه کلیدی const استفاده کرد. با استفاده از این کلمه کلیدی، نحوه رفتار متغیر را در زمان اجرا تعیین میکنیم. کلمه کلیدی const بیان میکند که مقدار اختصاص داده شده به متغیر در زمان کار برنامه، ثابت و غیرقابل تغییر است.
- به همین صورت میتوان از کلمات کلیدی دیگری مانند auto و register برای تعریف متغیر خودکار استفاده کرد. در متغیرهای تعریف شده با کلمه کلیدی auto نوع داده به صورت خودکار تعیین شده و وابسته به نوع مقدار اختصاص داده شده به متغیر است. در حالی که کلمه کلیدی register محل ذخیرهسازی مقدار متغیر را در حافظه تعیین میکند. این کار معمولا برای ذخیرهسازی متغیر در ناحیهای به کار برده میشود که سرعت دسترسی بالاتری دارد.
ساخت متغیر در زبان C به چه معنا است؟
ساخت متغیر نوعی مرحله میانی یا مرحله پشت صحنه است که به طور کامل توسط کامپایلر مدیریت میشود. این مرحله شامل اختصاص دادن و فراخوانی فضای حافظه برای متغیر در هربار اجرای برنامه است. اندازه فضای حافظه مورد استفاده با کمک نوع داده تعیین میشود.
به عبارت دیگر، در فاز مربوط به ساخت متغیر، کامپایلر نام مربوط به متغیر را به مکانی با آدرس و اندازه مشخص در حافظه متصل میکند. باید اشاره کنیم که در این مرحله، متغیر هنوز مقداردهی نشده و محتویات درون آن مقداری زائد و تصادفی است. مقدار مربوط به متغیر در فاز آخر به آن اختصاص پیدا میکند. این فاز را هم در بخش بعدی توضیح دادهایم.
مرحله ساخت متغیر فقط مربوط به زمان کامپایلکردن است. زیرا کامپایلر از این اطلاعات برای اتصال متغیرها به برنامه استفاده میکند. در زبان برنامه نویسی C معمولا مراحل تعریف و ساخت متغیر در یک مرحله اتفاق میافتند.
مقداردهی متغیرها در زبان C
در زبان برنامه نویسی C «مقداردهی» (Initialization) اشاره به فرایندی دارد که در طی آن مقدار مشخصی به متغیر مورد نظر اختصاص داده میشود. این مقدار جایگزین مقدار زائدی میشود که در زمان تعریف و ساخت متغیر توسط کامپایلر به صورت تصادفی به آن اختصاص داده شده بود.
دو روش مختلف برای مقداردهی یا اختصاص داده با معنا به متغیرها وجود دارد.
- روش اول: در زمان تعریف متغیر
- روش دوم: بعد از تعریف متغیر
به روش دوم، «مقداردهی درونخطی» (Inline Initialization) نیز گفته میشود.
سینتکس مقداردهی متغیرها در زبان C
در این بخش از مطلب، سینتکس مورد استفاده برای مقداردهی متغیرها در زبان C را نمایش دادهایم. همینطور که در بخش قبل اشاره شد، دو روش برای این کار وجود دارد که در ابتدا سینتکس مربوط به روش اول - مقداردهی در زمان تعریف - را نمایش میدهیم.
1data_type variable_name = value;
در کد بالا، پارامترهای variable_name و data_type به ترتیب به نام متغیر و نوع مقدار قابل پذیرش آن اشاره میکنند. اما پارامتر value نشاندهنده داده در نظر گرفته شده برای اختصاص به متغیر است. این مقدار حقیقی باید از نوعی باشد که قبلا در پارامتر data_type مشخص کردهایم.
برای مثال در کادر زیر، متغیری را به صورت همزمان تعریف، ساخته و مقداردهی کردهایم.
1int myNumber = 10;
در کد بالا، متغیری را با نوع int تعریف کردهایم. نام این متغیر را برابر با myNumber قرار داده و مقداری از نوع عدد صحیح - مقدار 10 - را به آن اختصاص دادهایم.
روش جایگزین برای مقداردهی انواع متغیر در زبان C این است که مقدار مورد نظر را در خط کد جداگانهای به متغیر خود اختصاص دهیم. این خط کد بعد از کد مربوط به تعریف متغیر نوشته میشود.
توجه: لازم نیست که خط کد مقداردهی به متغیر، بلافاصله بعد از تعریف متغیر نوشته شود. بلکه میتواند در هر جای دیگری از برنامه بعد از تعریف متغیر قرار بگیرد.
1int number1 = 23;
2int number2;
3number2 = 11;
برای مثال، در کادر بالا یکبار در خط اول متغیری را به صورت همزمان تعریف کرده و مقداردهی کردیم. اما در خط دوم ابتدا متغیر دیگری را تعریف کرده و سپس در خط سوم مقداری را به آن اختصاص دادهایم.
از این روش جایگزین برای تغییردادن مقدار درون متغیرها بعد از مقداردهی اولیه نیز استفاده میشود. به همین دلیل اغلب با عنوان روشی برای تخصیص مقدار به متغیرها - با نام Assignment - در زبان C شناخته میشود.
علت نیاز به مقداردهی متغیر
در زمان اختصاص دادن حافظه به متغیرها، کامپایلر مقدار درون هیچ متغیری را تغییر نمیدهد. چه این مقدار جزو مقداردهیهای اولیه باشد و چه مقدار بیارزش و تصادفی. بنابراین لازم است که متغیرها را در زبان C مقداردهی کنیم. با این کار مطمئن میشویم که در زمان استفاده از متغیرها در محاسبات یا عبارتهای برنامه نویسی، شامل مقادیر معتبری - بهجای مقادیر تصادفی و زائد - هستند. انجام این کار به جلوگیری از بروز خطا کمک میکند. مخصوصا خطاهایی که توسط مقدارهای غلط و غیر منتظرهای بهوجود میآیند که در زمان تعریف متغیرها توسط کامپایلر داخل آنها قرار میگیرد.
در کادر زیر، برنامه سادهای را با زبان C نوشتهایم که فرایندهای تعریف، مقداردهی و استفاده از متغیر را نمایش میدهد.
1#include <stdio.h>
2
3int main(){
4
5int myNumber = 20;
6char myChar = 's';
7float myFloat = 4.5;
8
9printf("myNumber: %d\n",myNumber);
10printf("MyCharacter: %c\n",myChar);
11printf("MyFloat: %f\n",myFloat);
12
13}
در نتیجه اجرای کد بالا، خروجی زیر در ترمینال به کاربر نمایش داده میشود.
myNumber: 20 MyCharacter: s MyFloat: 4.500000
تمام مراحل اجرایی در مثال بالا را در فهرست زیر به صورت مرتب توضیح دادهایم.
- ابتدا کار خود را با شامل کردن - استفاده از کلمه کلیدی #include - فایل هدر <stdio.h> برای اجرای عملیات ورودی و خروجی شروع کردهایم.
- سپس ساخت برنامه را با تعریف کردن تابع main() ادامه دادیم. تعریف تابع main()، نقطه شروع اجرای برنامه است.
- در داخل تابع main() سه متغیر مختلف از نوعهای متفاوت را تعریف کردیم. این متغیرها را همزمان با تعریف، مقداردهی نیز کردیم. در واقع تعریف و مقداردهی هر متغیر با یک خط کد انجام شده است.
- متغیر اول از نوع عدد صحیح تعریف شده و دارای نام myNumber است. این متغیر را با عدد صحیح 20 مقداردهی اولیه کردیم.
- متغیر دوم از نوع Character - مخصوص ذخیره کاراکترهای نویسهای - تعریف شده و دارای نام myChar است. این متغیر را با حرف «s» مقداردهی اولیه کردیم.
- متغیر سوم از نوع عدد Float در برنامه نویسی - شامل بخش اعشار - تعریف شده و دارای نام myFloat است. این متغیر را با عدد اعشار 4.5 مقداردهی اولیه کردیم.
- بعد از آن، برای نمایش مقدار این متغیرها در رشتهی شکل داده شدهای، سه بار از دستور printf() استفاده کردهایم.
- در این رشتههای مرتب و با معنا، از %d و %c و %f به عنوان مشخص کنندههای قالب استفاده کردیم. با کمک این مشخص کنندهها، نوع دادههایی را مشخص میکنیم که باید در جایگاههای معین شده قالب رشتهها قرار بگیرند. همچنین در انتهای هر خط از کد دستوری \n نیز استفاده کردهایم. این کاراکتر به نام « Newline Escape Sequence» شناخته شده و کرسر را بعد از نمایش هر خروجی به خط بعدی انتقال میدهد.
در مثال بالا، دیدیم که چگونه میتوان متغیری را تعریف، مقداردهی و استفاده کرد. در این مثالها سه نوع مقدار مختلف برای متغیرها را به کار برده و همچنین تعریف و مقداردهی متغیرها را به کمک یک خط کد انجام دادیم.
در مثال زیر از روش جایگزین برای تعریف و مقداردهی متغیرها به صورت جداگانه استفاده کردهایم.
1#include <stdio.h>
2
3int main(){
4
5int var;
6var = 89;
7
8printf("The value stored in variable var is: %d",var);
9
10retu
بعد از اجرای کد بالا، خروجی زیر در ترمینال به کاربر نمایش داده میشود.
The value stored in variable var is: 89
تمام مراحل اجرایی مثال کدنویسی شده بالا با زبان C را در فهرست زیر به صورت مرتب توضیح دادهایم.
- ابتدا درون تابع main()، متغیر Integer را تعریف کردهایم. نام این متغیر var است و هیچ مقدار اولیهای را به آن اختصاص ندادهایم.
- در خط کد بعدی با استفاده از عملگر تخصیص = مقدار 89 را به متغیر var اختصاص دادیم.
- سپس از تابع printf() برای نمایش مقدار متغیر در کنسول استفاده کردیم.
- در نهایت هم تابع main() اجرای خود را از طریق دستور return 0 با موفقیت به پایان رساند.
قوانین نام گذاری انواع متغیر در زبان C
زبان C یکی از زبانهای تخصصی و مهم در دنیای کامپیوتر است. برای درک بهتر قوانین نام گذاری انواع متغیر در زبان C بهتر است در ابتدا با اجزای سازنده برنامههای آشنا شویم. به همین منظور مشاهده فیلم آموزش رایگان معرفی اجزای سازنده یک برنامه C از فرادرس گزینه مناسبی است. به منظور کمک به مخاطبان مجله، لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در زمان تعریف یا نامگذاری انواع متغیر در زبان C، لازم است که به قوانین پایین توجه کنیم.
- نام متغیرها باید حتما با حرف الفبا یا «خط زیر» (Underscore) ـ شروع شود.
- در نامهای متغیرهای زبان C مجاز به استفاده از هیچ کارکتر خاصی بهجز «خط زیر» نیستیم. کاراکترهایی مانند «#» و «@» و «$» و غیره نباید در نامهای متغیرها به کار برده شوند.
- در زمان تعریف انواع متغیر در زبان C، فضای خالی و خط تیره - نباید استفاده شوند.
- کلمات کلیدی مانند int و char و float نمیتوانند به عنوان نام متغیر به کار برده شوند. زیرا این کلمات در سینتکس زبان برنامهنویسی C دارای معانی مشخصی هستند و توسط کامپایلر این زبان به منظور انجام وظایف مشخصی رزرو شدهاند.
- تعریف متغیرهای درون بلوک توابع، به صورت پیشفرض از نوع متغیرهای خودکار هستند.
در زمان نامگذاری متغیرهای زبان C بسیار مهم است که توافقات و محدودیتهای مشخص شده زیر را نیز رعایت کنید.
- نام متغیرها باید با حروف الفبا یا خط زیر شروع شوند. نمیتوان نام متغیرها را با ارقام شروع کرد.
1int _validName; // Correct
2int validName; // Correct
3int 9invalid; // Incorrect
- هیچ کارکتر خاصی بهجز خط زیر نباید در نام متغیرها به کار برده شود. از استفاده کاراکترهایی مانند # و @ یا $ دوری کنید.
1int valid_name; // Correct
2int invalid#name; // Incorrect
- نام متغیرها نمیتوانند شامل فضای خالی یا خط تیره معمولی باشند. متغیرهایی که نام آنها از چندین کلمه مختلف تشکیل شده باید از کاراکتر خط زیر مانند total_count استفاده کرده یا از تکنیک «CamelCase» پیروی کنند، مانند TotalCount.
1int validName; // Correct
2int invalid name; // Incorrect
3int invalid-name; // Incorrect
- کلمات کلیدی زبان C را نمیتوان به عنوان نام متغیر به کار برد. کلمات کلیدی مانند int و float یا return به منظور استفاده در عملکردهای خاص درون زبان، رزرو شدهاند.
1int validVar; // Correct
2int int; // Incorrect
- حساسیت به حروف بزرگ و کوچک: زبان C نسبت به بزرگی و کوچکی حروف حساس است. به این معنا که کلمات «var» و «Var» و «VAR» را میتوان به عنوان نامهای متغیرهای مجزا در نظر گرفت.
- نام متغیرها باید با معنی باشند: استفاده از نامهای توصیفی خواندن و درک کدها را سادهتر میکند. مخصوصا در برنامههای بزرگ، برای مثال استفاده از «totalStudents» برای متغیر، بهتر است تا «x».
- متغیرهای خودکار: متغیرهایی که درون بلوک کدها تعریف شدهاند، به صورت پیشفرض به عنوان متغیر خودکار در نظر گرفته میشوند. به این معنا که طول زمان استفاده آنها از حافظه به صورت خودکار توسط برنامه کنترل میشود.
1void myFunction() {
2int autoVar; // Correct
3}
ویژگی های انواع متغیر در زبان C
در این بخش از مطلب به بررسی چند ویژگی درباره متغیرهای زبان C میپردازیم.
غیر قابل تغییر بودن نوع متغیرها
در زبان C نوع هر متغیری را باید در زمان تعریف آن مشخص کرد. وقتی که نوع متغیری مشخص شد دیگر امکان تغییر دادن آن وجود ندارد. این قانون به کامپایلر کمک میکند که در زمان ذخیرهسازی متغیرها از قبل شکل و اندازه محتوی آنها را بداند. در نتیجه حافظه کامپیوتر به شکل منظمتری باقیمانده و عیبیابی کدها با مشکلات کمتری انجام میشود. به وسیله نوعهای تثبیت شده در زمان کامپایل، زبان C به شکل موثری حافظه کامپیوتر را بدون سربار اضافه مدیریت میکند.
کاربردهای متغیرها در زبان C
در این قسمت از مطلب، چند مورد از استفادههای مهم انواع متغیر در زبان C را بیان کردهایم.
- ذخیره دادهها: متغیرها وظیفه نگهداری دادههایی را دارند که در سرتاسر برنامه استفاده میشوند. در نتیجه هر زمان که نیاز شود این دادههای قابل استفاده خواهند بود.
- کار با برنامه: بهوسیله کار با متغیرها توسط عملگرهای ریاضی، عملگرهای مقایسه منطقی و غیره، برنامهها به سادگی میتوانند برای تولید خروجیهای متنوع یا حل کردن مسائل و بدون نیاز به تغییرات بزرگ در کدها اقدام کنند.
- مدیریت حافظه: متغیرها به صورت خودکار به مکانهای مشخص شدهای در حافظه RAM تخصیص داده میشوند. در نتیجه مدیریت منابع به شکل موثر و سادهای انجام میشود.
- افزایش خوانایی کدها: متغیرها ساختار منطقی را برای برنامه فراهم میکنند. در نتیجه خواندن و عیبیابی برنامهها به شکل سادهتری ممکن میشود.
- افزایش کارآمدی: استفاده دوباره از متغیرها در طول زمان اجرای برنامه میتواند باعث کاهش سربار استفاده از حافظه شود. زیرا فراخوانیهای مکرر از حافظه احتمال بروز سربار را افزایش میدهد.
مشخص کننده های قالب و متغیرها در زبان C
«مشخصکنندههای قالب» (Format Specifiers) در زبان C کاراکترهای مخصوصی هستند که با علامت % شروع میشوند. این کاراکترهای خاص برای مشخص کردن نوع مقدارهای نمایش داده شده در خروجی به کار برده میشوند. برای نمونه %d برای اعداد صحیح، %f برای اعداد اعشار و %c برای کاراکترها استفاده میشوند. این «مشخصکنندهها» به تابع printf() کمک میکنند تا روش نمایش هر آرگومان را بر روی صفحه نمایش تشخیص دهد. در تمام مثالهای نمایش داده شده این مطلب از مشخصکنندههای قالب استفاده کردهایم.
فیلم های آموزش C و C++ در فرادرس
زبانهای برنامهنویسی C و C++ جزو زبانهای پایه و بسیار قدرتمندی هستند که طرفداران بسیار زیادی در بین برنامهنویسان دارند. این زبانها خود پایهای برای طراحی و توسعه زبانهای برنامهنویسی مدرناند. سرعت بالا، قدرت زیاد و استحکام باعث شده که هنوز برای انجام پروژههای حساس جزو گزینههای اول باشند. فرصتهای شغلی این زبانها در حال زیادتر شدن هستند و برنامهنویسان حرفهای را به خود مشغول میکنند. به همین دلیل فرادرس فیلمهای آموزشی زیادی را با هدف پشتیبانی از افراد علاقهمند به زبانهای C و C++ تولید و منتشر کرده است. در پایین چند مورد از این فیلمها را معرفی کردهایم.
- فیلم آموزش برنامه نویسی C++ با فرادرس
- فیلم آموزش برنامه نویسی پیشرفته، دوره شی گرایی در C++ با فرادرس
- فیلم آموزش پروژه محور C درباره پیاده سازی بازی Snake با فرادرس
- فیلم آموزش ساختمان داده ها و پیاده سازی در سی پلاس پلاس با فرادرس
- فیلم آموزش برنامه نویسی رقابتی یا مسابقاتی Competitive Programming دوره مقدماتی با فرادرس
در صورت علاقه با کلیک بر روی تصویر زیر، به صفحه اصلی این مجموعه آموزشی رفته از فیلمهای بیشتری نیز دیدن کنید.
جمعبندی
استفاده از انواع متغیر در زبان C برای برنامهنویسی ضروری است. این متغیرها دادههایی را ذخیره میکنند که در طول اجرای برنامه امکان استفاده چندباره دارند و میتوان آنها را تغییر داد. در نتیجه به کار گرفتن این متغیرها برای مدیریت و استفاده چندباره از دادهها ضروری است. نوع متغیرهای زبان C را باید با استفاده از کلمات کلیدی مشخصی مانند int برای اعداد Integer و float برای اعداد اعشار مشخص کرد. این کار به کامپایلر برای تشخیص میزان حافظه مورد نیاز هر متغیر در زمان اجرای برنامه کمک میکند. زبان C شامل انواع مختلفی از متغیرها مانند متغیرهای محلی، سراسری، خودکار و ایستا میشود. هر نوع متغیری فضای اختصاصی کاری و محدودیتهای عملیاتی در بخشهای مختلف برنامه مختص به خود را دارد.
در این مطلب از مجله فرادرس با انواع متغیر در زبان C آشنا شده و روش پیادهسازی هر کدام را آموختیم. استفاده صحیح از متغیرها مخصوصا در زبانهای کامپایلری مانند C تاثیر بسیار زیادی در کیفیت برنامههای نوشته شده دارد. مخصوصا که در ابتدا باید نوع متغیر مورد استفاده تعیین شود و در طول زمان اجرای برنامه تغییر نوع متغیرها غیر ممکن است.