[ بستن ]

سیستم وبلاگ پارسی باکسسیستم مدیریت فروش هاست و دامینسایت شخصی محسن داوری برنامه نویس PHPهماهنگی با موتورهای جستجو , رنکینگ گوگل , google pagerank , page rank , seo , search

  انجمن اینترنتی برنامه نویسان  
  برنامه نویسی و رفع اشکال و نرم افزارها  
 
منوی اصلی

بخش ها

نویسندگان

آرشیو

آمار
بازدید امروز : 77
بازدید دیروز : 48 ‍
بازدید این ماه : 1160
بازدید امسال : 13723
بازدید کل : 24787
تعداد پست ها : 87
تعداد لینک های لینکستان : 26
تعداد نظر سنجی های وبلاگ : 2

 
سخن روز
سلام دوستان از امروز برای خواندن مطالب این وب سایت می توانید در خبرنامه ویژه ما عضو شوید تا رمز مطالب برای شما ارسال شود. هنگام عضویت در خبرنامه ویژه به جای اسم نام و استان خود را ( محمد حسن بهجت (یزد)) نوشته و بجای ایمیل هم ایمیل یاهو خود را وارد کنید. بقیه دوستان عضو هم آی دی یاهو ما را اد کنند. کلیه دوستان می توانند مقالات و نوشته های خود را در رابطه با علوم کامپیوتری به ایمیل وب سایت ارسال نمایند تا در وب سایت برای نمایش عموم گذاشته شود... خواهشمند است در پایان مقالات خود نام و نام خانوادگی و استان و رشته تحصیلی و سن خود را ذکر نمائید.به مقالات برتر مبلغ ای اهدا خواهد شد. با تشکر _ مدیریت سایت محمد حسن بهجت شماره ارسال مسیج : 09133522892


اشاره گر ها/ قسمت 2

·          انتقال آرایه به تابع

      انتقال آرایه بعنوان آرگومان به یک تابع ، استثنا بر فرم استاندارد فراخوانی با مقدار است . زیرا در اینجا فقط آدرس آرایه به تابع‌ گذر می‌کند نه کپی تمام عناصر آرایه . وقتی که تابعی با آرگومانی از آرایه فراخوانده می‌شود یک اشاره‌گر به اولین عنصر در آرایه ( یعنی آدرس اولین عنصر آرایه) به تابع گذر می‌کند ( به ‌خاطر داشته باشید که در C نام یک آرایه بدون زیرنویس یا index آن ، یک اشاره‌گر به اولین عنصر در آرایه است ) .

سه روش برای توصیف یا تعریف پارامتری که اشاره‌گر آرایه را دریافت می‌کند ، وجود دارد که به شرح زیر بیان می‌گردد :

 

روش اول -  پارامتر مورد نظر بصورت آرایه تعریف می‌گردد . مانند مثال زیر :

#include<stdio.h>

void  display (int num[10] ) ;

main( )

{

   int  a[10] , i ;

   for ( i = 0 ; i<10 ; + +i )

       a [i] = i ;

   display(a) ;

}

void display(num)

int  num[10] ;

{

   int  i ;

   for ( i=0 ; i<10 ; + +i )

       printf ("\n %d" , num[i] ) ;

}

 

در اینجا با اینکه پارامتر num بصورت یک آرایه 10 عنصری از نوع int توصیف شده است ، C ، بطور اتوماتیک آن را به یک اشاره‌گر با مقدار صحیح تبدیل می‌کند . زیرا هیچ پارامتری نمی‌تواند تمامی یک آرایه را دریافت کند . فقط یک اشاره‌گر به یک آرایه ، گذر داده می‌شود . بنابراین باید یک پارامتر اشاره‌گر ، آن را دریافت کند .

 

روش دوم - راه دوم برای توصیف یک پارامتر آرایه آن است که آن را بعنوان آرایه‌ای معرفی کنیم که اندازه ( تعداد خانه‌های آن ) مشخص نشده است به شکل زیر :

void display (num)

int  num[ ] ;

{

   for (i= 0 ; i< 10 ; + +i)

       printf("\n%d" , num[i]) ;

}

که در آن num بصورت یک آرایه از نوع int و با اندازه نامعلوم معرفی شده است . این روش نیز در واقع num را بعنوان یک اشاره‌گر int تعریف می‌کند .

 

روش سوم - راه سوم آن است که num را بعنوان یک اشاره‌گر int تعریف کنیم که اغلب برنامه‌نویسان حرفه‌ای این روش را بکار می‌برند . این روش در زیر نشان داده شده است :

void display (num)

int  *num ;

{

   int  i ;

   for (i =0 ; i<10 ; + +i)

       printf ("\n%d" , num [i] (;

}

که در آن "*" ، عملگر اشاره‌گر می‌باشد که این قسمت در فصل مربوط به اشاره‌گرها ، مورد بحث قرار خواهد گرفت .

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

·          مقداردهی اولیه اشاره‌گر

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

int  x ;

int  *px = &x ;

به هرحال نمی‌توان یک متغیر را قبل از اینکه توصیف یا اعلان گردد ، در دستوری بکار برد . بنابراین مجموعه دستورهای زیر غیرقابل قبول است :

int  *px = &x ;

int  x ;

همچنین می‌توان یک اشاره‌گر را بصورت :

int  *ptr = 0 ;

مقداردهی اولیه کرد که برای مشخص ساختن بعضی شرایط خاص بکار برده می‌شود .

در حالت کلی ، نسبت دادن یک مقدار صحیح به یک متغیر اشاره‌گر ، دارای مفهوم نیست . به هرحال ، مثال اخیر یک حالت استثنا‌ء در این مورد است که همانطور که در بالا بیان شد ، برای مشخص ساختن بعضی شرایط خاص بکار برده می‌شود . در چنین مواردی توصیه می‌گردد که یک ثابت سمبولیک مانند NULL را که معرف صفر باشد تعریف نمود و آن را به اشاره‌گر اختصاص داد . این روش ، تأکید می‌کند که اختصاص دادن صفر ، معرف یک شرط ویژه می‌باشد .

 

مثال- یک برنامه به زبان C می‌تواند تعاریف و عبارات زیر را شامل باشد :

# define   NULL   0

float  x , y ;

float   *pr = NULL ;

      در این مثال متغیرهای x و y بصورت متغیرهایی از نوع ممیز شناور و pr بصورت یک متغیر اشاره‌گر اعلان شده است که مقداری ویژه به‌عنوان مقدار اولیه به آن نسبت داده شده است.  بنابراین استفاده از ثابت سمبولیک NULL نشان می‌دهد که این اختصاص مقدار اولیه ، چیزی به غیر از اختصاص مقدار صحیح معمولی است . به هرحال در اغلب کامپایلرهای C ، ثابت سمبولیک NULL در چندین header file و بویژه در <stdio.h> تعریف شده است ، پس اختصاص مقدار اولیه صفر یا NULL به یک اشاره‌گر ، هم‌ارز است ، ولی NULL ترجیح داده می‌شود .

ادامه دارد ....


نوشته شده توسط محمد حسن بهجت | نظرات [1] | لینک به این مطلب |


 
تابلوی گفتمان



نظرسنجی

پیوندها

لوگو هـــا

خبرنامه ها





خبرنامه ویژه





خبرنامه عمومی


لوگو دوستان

پیوندهای روزانه

 
Copy Right 2007 ParsiBox.com ( Designed By ParsiBox Master Design )