آموزش مفاهیم پایه زبان C

آموزش مفاهیم پایه زبان C

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


پیش نیاز های لازم :
یادگیری مفاهیم پایه زبان برنامه نویسی و به دنبال آن زبان قدرتمند و ریشه ای C در یک مقاله امکان پذیر نیست. بنابراین در این مقاله فرض ما بر این است که شما پیش از این با مفاهیم اولیه زبان برنامه نویسی آشنایی مختصری دارید. زبان های برنامه نویسی ای همچون Ruby، PHP و جاوا اسکریپت گزینه های خوبی برای شروع یادگیری زبان برنامه نویسی C و نسخه ارتقاء یافته شی گرای آن محسوب می شوند. از این رو در صورتی که با یک پیش زمینه حداقلی در زمینه برنامه نویسی وب وارد دنیای موبایل می شود نباید مشکل خاصی در یادگیری زبان C در ادامه این مقاله داشته باشید.
در این مقاله به شما نشان خواهیم داد که چه ویژگی ای از زبان C باعث منحصر به فرد شدن این زبان از سایر زبان های برنامه نویسی شده است. در نتیجه به هیچ وجه به مفاهیم خیلی پایه ای مانند تعریف حلقه ها و متغیرها که در تمامی زبان های برنامه نویسی به نوعی مشترک هستند نخواهیم پرداخت. در ادامه به مطالبی همچون صرفاً نحوه اعلان متغیرها در زبان C و همچنین به معرفی اشاره گرها خواهیم پرداخت. به عبارت دیگر تمرکز این مقاله روی مورادی خواهد بود که شما را با زبان برنامه نویسی C بیشتر آشنا کند. با ما همراه باشید.
مقدمه :
آقای دنیس ریچی فرایند توسعه زبان C را از اواخر دهه 1960 هنگامی که در آزمایشگاه AT&T Bell کار می کرد شروع کرد. به لطف کاربردهای گسترده و همچنین سادگی در طراحی، زبان C را می توان تقریباً در هر پلتفرمی که تصورش را بکنید به کار برد. گستره استفاده از این زبان تنها به یک سیستم عامل خاص محدود نشده است. اگر گریزی به دیگر زبان های برنامه نویسی زده باشید حتماً با وجه اشتراکات زیادی بین آنها روبرو شدید. ریشه و ساختار بیشتر زبان های برنامه نویسی همچون سی شارپ،جاوا،PHP و پایتون از زبان C گرفته شده است. آقای دنیس ریچی نام زبان برنامه نویسی تحت توسعه جدید خود را C گذاشت چرا که این زبان از برخی مفاهیم زبان قبلی یعنی B که توسط آقای Ken Thompson طراحی شده الهام گرفته است. با وجود اینکه زبان C از زبان های بدون نوعی همچون B و BCPL الهام گرفته شده است اما ذات زبان C بر پایه انتخاب نوع طراحی شده است. در ادامه توضیحات بیشتر را در بحث انتخاب نوع خدمت شما ارائه خواهیم داد.

یادگیری مفاهیم اولیه زبان برنامه نویسی C زمان زیادی را از شما نخواهد گرفت. چرا که این زبان تنها از یک مجموعه کوچک از لغات کلیدی تشکیل شده است. با این حساب شما می توانید این زبان را بسیار آسان فرض کرده، و اینکه بدانید تنها چیزی که لازم است را در اختیار می گیرید نه چیز اضافه ای دیگر که موجب سردرگمی شود. در حقیقت مسئولیت عملیات های اضافه دیگر شامل ورودی و خروجی های کاربری به عهده کتابخانه ها گذاشته شده است. نکته ای که باید دقت داشته باشید این است که شما قادر به استفاده از قابلیت هایی همچون ساختار درختی Heap و ساختار مدیریت حافظه garbage collection در این زبان نخواهید بود. و تنها قادر به استفاده از یک شکل ساده از modularity هستید. به هر حال اندازه کوچک این زبان در مقابل ویژگی های گفته شده یک تلافی به حساب آمده که در نهایت هم موجب راحتی و تسریع در یادگیری این زبان خواهد شد.
صرف نظر از این که C در واقع یک زبان سطح پایین است اما یادگیری و استفاده از دستورات آن به هیچ وجه مشکل نیست. اکثر برنامه نویسان و توسعه دهندگان پلتفرم های مک و iOS که به وفور از زبان شی گرای C استفاده می کنند  در حقیقت به علت همین شی گرا بودن زبان C هست که آنها از کار کردن مستقیم با C و یا کتابخانه های آن هراس دارند. نکته ای که باید بدانید این است که زبان C البته شی گرا در واقع تنها یک مجموعه بزرگ تر از زبان C بوده و چیزی بیشتر از یک لایه اضافه نسبت به زبان C نیست.
اثرات جادویی تمرین :
یادگیری یک زبان برنامه نویسی صرفاً با مطالعه در مورد آن نتیجه مطلوبی در پی ندارد. در واقع این تمرین و عشق و علاقه است که شما را به کاوش و کندوکاو و نکته یابی می رساند. حال برای شروع کار یک پروژه جدید را در رابط کاربری نرم افزار Xcode ایجاد می کنیم و چند خط از زبان برنامه نویسی C  را درون آن برای آشنایی بیشتر با زبان خواهیم نوشت. با osx.ir همراه باشید.
ابتدا نرم افزار Xcode را اجرا کرده و یک پروژه جدید را از مسیر New > Project تحت منوی فایل برنامه ایجاد کنید.

ما در اینجا قصد ایجاد یک برنامه iOS به مانند آنچه که در سری های قبل ایجاد کردیم نداریم. به جای آن ما می خواهیم یک پروژه OS X ایجاد کنیم. حال مطابق تصویر روش گزینه Application که در سمت چپ کادر محاوره ای زیر عنوان OS X مشخص شده کلیک کنید. حال در سمت راست و از بین گزینه های نمایان شده روی گزینه Command Line Tool کلیک کرده و در نهایت روی گزینه Next در پایین کادر کلیک کنید.

حال مطابق تصویر زیر نام پروژه خود را C Primer قرار داده و برای فیلدهای organization name و company identifie به مانند تصویر زیر مقدار تعیین کنید. اکنون مقدار کادر بازشدنی روبروی کلمه Type را C تنظیم کنید. تنها گزینه مهمی که واقعاً تمرکز این مقاله هم روی آن است همین مقدار Type است. نگران دیگر تنظیماتی که در تصویر مشخص شده نباشید و برای ادامه کار روی گزینه Next کلیک کنید.

حال در صفحه نمایان شده، محل دلخواهی که قصد دارید پروژه خود را در آنجا ذخیره کنید مشخص کنید. فعلاً برای این پروژه هیچ نیازی به ساخت یک git repository وجود ندارد. چرا که هدف ما از ساخت این پروژه تنها یادگیری زبان C  بوده و قصد ایجاد یک ابزار کاربردی خط فرمان نداریم.

مروری بر پروژه :
در مقایسه با برنامه iOS ای که پیش از این در سری های قبل ایجاد کردیم پروژه حال حاضر به طور واقعاً محسوسی کوچک به نظر می رسد. در حقیقت این پروژه تنها شامل دو فایل کد با نام های main.c و C_Primer.1 است. برای یادگیری زبان C در سطح فعلی، فایل مورد نظر ما فقط main.c می باشد. همانطور که از نام فایلها مشخص است در انتهای آنها پسوند C را ملاحضه می کنید این پسوند نشان دهنده این است که فایل مورد نظر در اقع یک فایل کد به زبان برنامه نویسی C  است.

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


//
//  main.c
//  C Primer
//
//  Created by Bart Jacobs on 15/02/14.
//  Copyright (c) 2014 Tuts+. All rights reserved.
//
 
#include <stdio.h>
 
int main(int argc, const char * argv[])
{
 
    // insert code here...
    printf("Hello, World!\n");
    return 0;
}

 

یک نگاه دقیقتر به تابع main، یک سری ویژگی و خصوصیت های جالبی از زبان C  را برای ما آشکار می سازد. اگر به یاد داشته باشید پیشتر گفته شد که زبان C یک زبان نوع دار یا به عبارتی منحصر به انتخاب نوع است به این معنا که متغیرها و توابعی که در آن قرار می گیرند پیش از استفاده باید نوع دقیق آن تعریف شود. قاعده استفاده از تابع main به این صورت است که ابتدا باید نوع برگشتی تابع را (در اینجا int) مشخص کنید. همچنین دقت داشته باشید که آرگومان های تابع نیز دارای نوع هستند. نکته ای که وجود دارد این است که لغت کلیدی function که در اکثر زبان های رایج مورد استفاده قرار می گیرد در زبان C کارایی ندارد.
در مثال بالا، بدنه تابع main با یک توضیح یک خطی که با  نماد // آغاز شده، شروع می شود. خط دوم بدنه تابع در واقع یک تابع دیگر است که جزئی از کتابحانه استاندارد زبان C محسوب می شود. این کتابخانه با پیش دستور ثابت #include در ابتدای فایل کد مشخص شده است. تابع printF یک پیام را به صفحه خروجی کاربر ارسال می کند که در اینجا عبارت داخل این دستور، "Hello, World!\n" در نظر گرفته شده است. در این عبارت الگوی \n بیانگر انتقال مکان نما به خط جدید است. به طور کلی خروجی این دستور در رابط Xcode به کنسول Xcode ارسال خواهد شد. در ادامه، مطالبی را در این حوضه خدمت شما ارائه خواهیم داد.
همانطور که از کدهای بالا مشخص است تابع main با برگشت دادن مقدار صفر به کار خود پایان می دهد. در واقع زمانی که یک برنامه عدد صفر را بر می گرداند نشان دهنده این است که تابع با موفقیت کار خود را به سرانجام رسانده است. تمامی کارهایی که در تابع main پیش می آید همین موارد بود که ذکر شد. در ادامه در مورد آرگومان های تابع main توضیحاتی را بیان خواهیم کرد.
ساخت(کامپایل) و اجرا :
حال که از وظایف تابع main اطلاع داریم وقت آن رسیده تا ابزار خط فرمان را کامپایل کرده و اجرا کنیم. با ساخت برنامه، کدهای موجود در فایل main.c تحت ساختار دودویی کامپایل شده و بعد از آن می توان به صورت مستقل آن را اجرا کرد. فرایند کامپایل و اجرای ابزار خط فرمان با کلیک بر روی دکمه Play مستطیل شکل که در سمت چپ و بالای پنجره قرار دارد آغاز خواهد شد.
اگر همه چیز تا اینجای کار خوب پیش رفته باشد، نرم افزار Xcode باید بخش خطایاب را در پایین پنجره مذکور نمایان کند. در ضمن برای مخفی کردن بخش خطایاب باید روی گزینه ای که در تصویر زیر مشخص شده است کلیک کنید.

پنجره خطایاب شامل تو قسمت است. سمت چپ این پنجره مختص به متغیرها بوده و سمت راست آن نیز  یک پنجره کنسول مانند است. شما باید در این کنسول با توجه به کدهای گفته شده، عبارت Hello, World! را ببینید. Scode همچنین در پایان به شما خواهد گفت که برنامه با یک کد خروج 0 به پایان رسیده است در واقع این نشان گر این است که برنامه به صورت عادی و عاری از مشکل به انتها رسیده است.


توضیحی مختصر :
در ادامه این مقاله آموزشی، به معرفی مهمترین خصوصیات زبان برنامه نویسی C خواهیم پرداخت. میزان اطلاعاتی که در این مقاله به آنها پرداخته می شود در مقابل چیزی که لازم است برای شروع کار برای تولید و توسعه نرم افزار تحت بستر iOS یاد بگیرید محدود است. در مقاله آتی اگر عمری باقی باشد به سراغ آموزش زبان برنامه نویسی C البته از جنس شی گرا خواهیم رفت.
برخلاف زبان های مفسری ای همچون زبان های Ruby، PHP و جاوا اسکریپت، زبان برنامه نویسی C جزء زبان های کامپایلری محسوب می شود. در حقیقت کد اصلی‌ای که توسط یک زبان کامپایلری نوشته شده است ابتدا تحت زبان دودویی که در واقع همان زبان مبدا کامپیوتر است تبدیل شده و اجراء می گردد. فرایند کامپایل کردن کدها، در نهایت سبب کاهش کدها و تبدیل آنها به دستورالعمل هایی می شود که می تواند توسط ماشین مقصد ترجمه و درک شود. این قضیه همچنین به این معنا خواهد بود یک برنامه ای که روی یک ماشین کامپایل شده است ضمانتی اجرایی روی ماشینی دیگر را به ما نمی دهد.
پرواضح است که برنامه های نوشته شده تحت زبان های برنامه نویسی مفسری همچنین نیازمند کاهش کد و تبدیل آنها به دستورالعمل را دارند تا توسط ماشین مقصد قابل درک باشند. به هر حال این فرایند در حین زمان اجرا رخ خواهد داد. نتیجه ای نهایی که اتفاق خواهد افتاد این است که برنامه های نوشته شده در یک زبان کامپایلری نسبت به برنامه هایی که در زبان های برنامه نویسی مفسری نوشته شوند سریعتر اجرا خواهند شد.
انواع داده  :
همانطور که پیشتر ذکر شد تفاوت عمده دیگر زبان برنامه نویسی C با دیگر زبان های برنامه نویسی‌ای همچون PHP, Ruby و جاوا اسکرپیت در واقع نوع دار بودن این زبان است. به این معنا که نوع داده ای که یک متغیر باید نگهداری کند را می توانیم با نوع دادن به آن مشخص کنیم. در زبان C انواع داده پایه شامل نوع کاراکتری(char)، عددی(int) و نوع ممیز شناور(float) هستند. از این انواع پایه یک سری نوع دیگر نیز مشتق شده است که شامل اعشاری دقیق (double precision floating-point number، عددی بلند(Long)  و نوع unsigned که در واقع می تواند تنها شامل مقادیر عددی مثبت باشد هستند. برای آشنایی و درک بیشتر با دیگر انواع داده موجود در زبان C پیشنهاد می کنم سری به آدرس C data types که میزبانی آن را دانشنامه ویکیپدیا بر عهده دارد بزنید.
شاید تا العان متوجه شده باشید که در بین لیست داده های مهم ذکر شده، از نوع داده رشته ای صحبتی به میان نیامده است. نوع داده رشته ای در واقع به عنوان مجموعه ای از کاراکترها(chars) در زبان C ذخیره می شوند. یک نوع داده Char توانایی ذخیره سازی یک کاراکتر اسکی (ASCII) را دارد به این معنا که آرایه ای از کاراکترها توانایی ذخیره یک رشته با هر طولی را خواهند داشت. به مثال زیر توجه کنید تا معنای آنرا در عمل درک کرده و شناخت کاملی از نحوه کار آن به دست بیاورید.
همانطور که در مثال زیر ملاحظه می کنید براکت های باز و بسته به یکباره بعد از نام متغیر، مشخص کننده این هستند که ما با یک آرایه از کاراکترها سروکار خواهیم داشت.
در واقع پایان یک رشته در زبان C بر اساس Zero خواهد بود به این معنا که آخرین کاراکتر صفر در نظر گرفته شده است.


char firstName[] = "Bart";

حال اجازه دهید جزییات بیشتری از انواع داده های موجود را با مقایسه دو تکه کد بیان کنیم. اولین کد با زبان برنامه نویسی جاوا نوشته شده، و تکه کد دوم نیز بر اساس زبان C تدوین شده است. در زبان برنامه نویسی جاوا اسکریپت یک متغیر عموماً با لغت کلیدی var تعریف می شود. در حالی که زبان C لغت کلیدی برای تعریف متغیر در خود ندارد. در عوض یک متغیر در زبان C با پیشوند های انواع داده موجود به صورت int و char اعلان می شوند. به دستورات زیر دقت کنید :


var a = 5;
var b = 13.456;
var c = 'a';

حال بیایید به معرفی برخی از متغیرهایی که ما پیش از این در تابع main دیدیم بپردازیم. ابتدا بدنه تابع main را به مانند دستورات زیر تغییر دهید. به منظور چاپ و نمایش متغیرها در خروجی با استفاده از تابع printf ما از format specifiers (نشان گذاری قالب)استفاده می کنیم. برای آشنایی با یک لیست کاملتر از نشان گذاری های قالب به لینک this link مراجعه کنید.

 


int main(int argc, const char * argv[])
{
 
    // insert code here...
    printf("Hello, World!\n");
 
    // Variables
    int a = 5;
    float b = 6.3;
    char c = 'r';
 
    printf("this is an int: %i\n", a);
    printf("this is a float: %f\n", b);
    printf("this is a char: %c\n", c);
 
    return 0;
}

 


همانطور که پیشتر ملاحظه کردید انتخاب نوع در زبان C، صرفاً به متغیرها محدود نشده است. در واقع توابع نیز باید یک نوع برگشتی و همچنین باید دارای نوع آرگومان هایی باشند که قادر به پذیرفتن آنها را داشته باشند. در ادامه کار توضیحات بیشتری را خواهیم داد با ما همراه باشید.
توابع :
فرض ما بر این است که شما پیش از این با توابع آشنایی اولیه دارید. در حقیقت یک تابع در زبان C به مانند زبان های برنامه نویسی دیگر، از یک سری کد تشکیل شده است که هدف و وظیفه مشخصی را دنبال می کند. پیش از تعریف تابع main ما یک نمونه اولیه تابع را اضافه کردیم. این نمونه اولیه به کامپایلر زبان می گوید که قرار است چه نوعی برگشت داده شده و چه آرگومان هایی را خواهد پذیرفت. حال بعد از اعلان تابع main ما این تابع را پیاده سازی می کنیم. کل کاری که این تابع انجام می دهد در واقع ضرب مقدار آرگومان وارد شده با عدد 5 و برگرداندن نتیجه آن خواهد بود.        #include <stdio.h>


 
int multiplyByFive(int a); // Function Prototype
 
int main(int argc, const char * argv[])
{
 
    // insert code here...
    printf("Hello, World!\n");
 
    // Variables
    int a = 5;
    float b = 6.3;
    char c = 'r';
 
    printf("this is an int > %i\n", a);
    printf("this is a float > %f\n", b);
    printf("this is a char > %c\n", c);
 
    // Functions
    printf("Five multiplied by five is %i\n", multiplyByFive(5));
 
    return 0;
}
 
int multiplyByFive(int a) {
    return a * 5;
}

 

ما همچنین بدنه تابع main را با فراخوانی تابع multiplyByFive به روز کردیم. دقت داشته باشید که درج نمونه اولیه تابع پیش از تابع main ضروری نیست. اما به طور کلی استفاده از آن می تواند مفید واقع شود چرا که به برنامه نویسان اجازه می دهد تا کدهای خود را تحت چندین فایل منتشر کرده و از این طریق به سازماندهی بیشتر پروژه کمک بیشتری بشود.
اگر یک تابع مقدار برگشتی نداشته باشد به این معناست که نوع مقدار برگشتی void تنظیم شده است. از نظر ماهیتی این بدان معناست که هیچ مقداری توسط تابع برگشت داده نشده است. حال به مثال زیر خوب دقت کنید. توجه داشته باشید که این تابع هیچ آرگومانی را قبول نمی کند. در حقیقت قرار دادن پرانترهای بعد از تابع حتی زمانی که یک تابع هیچ آرگومانی را نپذیرد نیز الزامی هستند.


// Function Prototype
void helloWorld();
 
// Function Implementation
void helloWorld() {
  printf("Hello, World!\n");
}


قبل از ادامه کار باید خدمتتان عرض کنم که زبان C به مانند زبان های دیگر همچون جاوا اسکرپیت از لغت کلیدی fucntion برای اعلان توابع استفاده نمی کند. در واقع پرانترهای موجود بعد از نام تابع مشخص می کند که helloWorld یک تابع است. همانطور که پیشتر گفته شد همین قضیه به نوعی دیگر برای متغیرها صدق می کند. با ذکر پیشوند یک نوع متغیر قبل از نام متغیر به کامپایلر اعلام می کنیم که در واقع آن دستور شروع تعریف یک متغیر است.
شاید پیش خود بگویید که چه لزومی به نوع دار بودن زبان C وجود دارد. برای برنامه نویسانی که مدت ها با زبان هایی همچون Ruby و PHP کار کرده اند شاید در وحله اول یادگیری یک زبان نوع دار کمی گیج کننده باشد. ویژگی اصلی نوع دار بودن یک زبان برنامه نویسی این است که شما مجبورید صراحتا رفتار برنامه را مشخص کنید. شناسایی خطاها در زمان کامپایل نیز یکی از ویژگی های اصلی زبان های نوع دار بوده که در ادامه این سری مقالات به آنها خواهیم پرداخت. با این وجود که زبان C یک زبان نوع دار یا شاید بهتر است بگوییم مبتنی بر نوع است اما در این حیطه پشتیبانی قوی‌ای را به برنامه نویس منتقل نمی کند. امروزه دیگر اکثر کامپایلرهای زبان C تبدیلات ضمنی را به صورت خودکار انجام می دهند. به عنوان مثال یک مقدار از نوع char می تواند به نوع عددی int تبدیل شود.
ساختارها :
نمی دانم درکی راجع به ساختارها دارید یا خیر. اما برای شروع کار گریزی به تعریف آقای ریچی و کرنیگان در این حوضه می زنیم. در واقع تعریفی که این دو نفر از ساختارها داشته اند به صورت زیر است :
" در واقع یک ساختار مجموعه ای از یک یا چند متغیر (با قابلیت برخورداری از انواع مختلف) است که تحت یک نام واحد برای مدیریت مناسب با هم گروه بندی شده اند".
حال اجازه دهید تا نگاهی به کد زیر برای درک نحوه کار ساختارها بپردازیم. ابتدا تکه کد زیر را درست پیش از دستور return متعلق به تابع main  قرار دهید :

 


// Structures
struct Album {
    int year;
    int tracks;
};
 
struct Album myAlbum;
struct Album yourAlbum;
 
myAlbum.year = 1998;
myAlbum.tracks = 20;
yourAlbum.year = 2001;
yourAlbum.tracks = 18;
 
printf("My album was released in %i and had %i tracks.\n", myAlbum.year, myAlbum.tracks);
printf("Your album was released in %i and had %i tracks.\n", yourAlbum.year, yourAlbum.tracks);

ما کار را با اعلان یک نوع جدید ساختار شروع کرده و نام آن را Album قرار می دهیم. بعد از اعلان نوع جدید ما از آن به این صورت استفاده می کنیم که ابتدا متغیرهایی که قرار است در رابطه با این ساختار استفاده کنیم را مشخص کرده و نام ساختار را که نیز album است تنظیم می کنیم. همچنین از الگوی نام متغیر و نقطه نیز به منظور خواندن یا ذخیره کردن مقادیر متغیرهایی که ساختار نگه می دارد استفاده می کنیم.
اشاره گرها :
شاید مبحث فراگیری اشاره گرها برای برخی افراد که قصد یادگیری زبان C را داشته باشند کمی دلسرد کننده باشد. با این وجود تعریف صرف یک اشاره گر بسیار ساده است. در واقع یک اشاره گر یک متغیر است که دربردارنده یک آدرس حافظه است. دقت داشته باشید که اشاره گر فقط یک نوع داده دیگر در زبان برنامه نویسی C به شمار می آید. حال اجازه دهید برای درک بهتر اشاره گرها، این مبحث را با مثالی عملی آغاز کنیم.
برای این منظور ابتدا تکه کد زیر را به یکباره قبل از دستور return متعلق به تابع main قرار دهید :


// Pointers
int d = 5;
int *e = &d;
 
printf("d has a value of %i\n", d);
printf("e has a value of %p\n", e);
printf("the object that e points to has a value of %i\n", *e);



در این مثال ما ابتدا یک متغیر با نام d ساخته و مقدار پیشفرضی را به آن نسبت دادیم. در خط پایینی آن هم، یک اشاره گر از جنس int و با نام e ایجاد کردیم. البته نکته ای که وجود دارد این است که چون e یک اشاره گر است نه یک متغیر عادی، طبق قاعده باید نماد ستاره یا همان asterisk را قبل از اشاره گر e قرار دهیم. همچنین نماد & یا همان ampersand نیز قبل از d قرار گرفته است. این عمل نشان می دهد که اشاره گر e آدرس محتوای d را باید در خود نگهداری کند. همیشه نحوه تعریف یک اشاره گر را به خاطر داشته باشید چرا که اشاره گر هم به نوعی یک متغیر بوده که حاوی آدرس یک متغیر دیگر است.
دستورات چاپی که در انتهایی کدی که اضافه کردیم مشخص شده سبب درک بیشتر نحوه کار خواهد شد. حال پروژه را کامپایل کرده و اجرا کنید تا خروجی های حاصله در کنسول رابط Xcode را بتوانید مورد بررسی بیشتر قرار دهید. همانطور که مشخص است مقدار متغیر d در واقع 5 در نظر گرفته شده است. حال به سراغ دستور چاپ دوم می رویم. اشاره گر با نام e شامل آدرس حافظه از جایی است که مقدار متغیرd در آنجا ذخیره شده است. در بخش انتهایی دستورات تعریف نیز ما از عملگر آمپرسند استفاده کرده تا مقدار متغیر d را بازیابی کنیم تا بتوانیم به آدرس آن نیز از طریق اشاره گر e دسترسی پیدا کنیم.
اگر تاکنون درک کاملی از نحوه کار با اشاره گرها با خواندن این بخش به دست نیاورده اید نگران نباشید چرا که درک کامل این مفهوم نیاز به زمان دارد. به هر حال در زمینه اشاره گرها در زبان C مقالات متعددی منتشر شده است که می توانید با کمی جست وجو در اینترنت به این منابع ارزشمند دسترسی پیدا کنید.
سمی کلن را به خاطر داشته باشید :
اگر پیش از این با زبان برنامه نویسی C کار کرده باشید حتماً می دانید که در انتهای هر دستور زبان C باید از نماد سمی کلن استفاده کنید. در واقع این نماد، بیان گر انتهای خط می باشد. به هر حال در محیط Xcode نیز همیشه چنین رفتاری وجود دارد و شما همیشه باید به یاد داشته باشید که گذاشتن سمی کلن در انتهای هر خط در این محیط، امری اجباری است در غیر این صورت با خطا مواجه خواهید شد.
نتیجه گیری :
مبحث ها و بخش های قابل ذکر در زبان برنامه نویسی C بیشتر از چیزی است که ما در این مقاله توضیح داده ایم. در مقاله بعدی تمرکز خود را روی زبان C البته از نوع شی گراء قرار خواهیم داد. به خاطر شباهت تقریباً کامل این دو زبان، درک شما از زبان C نیز با مقاله بعدی به طور قابل توجهی افزایش خواهد یافت.
بعد از شروع کار با بسته توسعه نرم افزاری iOS یا همان iOS SDK، ما مطمئن هستیم که در کسری از زمان با درگیر شدن با شیءها و اشاره گرها و به طور کلی محیط کار، روند کدنویسی و درک شما از این بخش ها به سرعت افزایش خواهد یافت. امیدوارم از این مقاله آموزشی لذت برده باشید. یا حق

نویسنده:هادی نجار

مقاله دیگر:

 آموزش ساخت اپل آیدی رایگان

منبع:code.tutsplus.com

تعداد بازدید : 743

نظرات
ناشناس
بسیار ممنون عالی بود
ارسال نظر

سوال امنیتی : مجموع دو عدد 4 و 5 =