چهارشنبه 17 شهريور 1389
کاربران : 353
تعداد مطالب : 3598
لینک‌ها : 8
تعداد نمایش مطالب : 170921

آخرین عکسها

ورود و عضویت در سایت

نام کاربری   
رمز عبور   
   
عضویت در سایت

شمارنده بازدید

بازدید های امروز  587  
بازدید های دیروز  1425  
تعداد افراد آنلاین   22  
کل بازدید ها  177780 
بازدید کنندگان امروز  49 
کل بازدید کنندگان  37385 
تعداد بازدید مطالب  212254 
تعریف اشاره گر چاپ پست الکترونیکی
تعداد بازدید: 36
Declaring pointers
تعریف اشاره گر
تکه کد زیر را که در آن دو اشاره گر تعریف شده در نظر بگیرید :

 struct MyStruct {

     int   m_aNumber;

     float num2;

 };

 

 int          * pJ2;

 struct MyStruct * pAnItem;


چهار خط اول یک استراکچر را تعریف میکند . در خط بعد اشاره گری تعریف شده که به یک عدد از نوع int   اشاره خواهد کرد .و در خط آخر اشاره گری تعریف شده که به محلی از حافظا اشاره خواهد کرد که از نوع استراکچری است که در بالا تعریف کرده ایم .


long  *  var1, var2;

int   ** p3;

 

 

در خط اول این کد اشاره گری تعریف شده که به محلی از حافظه با فرمت long  اشاره خواهد کرد

در خط دوم اشاره گری وجود دارد که به اشاره گری دیگر اشاره میکند که اشاره گر دوم به محلی از نوع long hahvi ld;kn


int MyFunction( struct MyStruct *pStruct );



اشاره گر ها اغلب به عنوان آرگومان ورودی به تابع نیز استفاده میگردند .در کد زیر چگونگی این تعریف را تابع با ورودی اشاره گر نمایش داده شده است .

این کار باعث میشود آدرس یک محل از حافظه به درون تابع ارسال شود و این کار باعث میشود که تغییراتی که تابع اعمال میکند روی متغیر اصلی اعمال شود .

ارسال استراکچر از طریق اشاره گر به تابع باعث میشود که بار اضافی به روی پشته برای ذخیره سازی مقدار اصلی استراکچر اعمال نگردد .




Assigning values to pointers
مقدار دادن به اشاره گر


قبل از این در مورد تعریف اشاره گر بحث کردیم . در مرحله بعد  نحوه مقدار دادن به اشاره گر را توضیح میدهیم .

و نحوه دادن آدرس یک متغیر به یک اشاره گر را توضیح میدهیم .


 int   myInt;

 int  *pPointer;

 struct MyStruct   dvorak;

 struct MyStruct  *pKeyboard;

 

 pPointer = &myInt;

 pKeyboard = &dvorak;

 

 


در اینجا pPointer به myint  اشاره خواهد داشت و pKeyboard به devorak  اشاره میکند  .
#include <stdlib.h>

 /* ... */

 struct MyStruct *pKeyboard;

 /* ... */

 pKeyboard = malloc(sizeof *pKeyboard);

 

در اینجا ما محلهای حافظه مورد اشاره اشاره گر هارا به صورت پویا در حین اجرا در اختیار میگیریم و اشاره گر به آن محل ها اشاره میکند .

با کمک دو تابع malloc  و  calloc  این عمل انجام میشود .

 


تابع malloc  اشاره گری داینامیک به محلی از حافظه ایجاد میکند که سایز آن محل را به عنوان پارامتر میگیرد .
static struct MyStruct val1, val2, val3, val4;

 

 struct MyStruct *ASillyFunction( int b )

 {

    struct MyStruct *myReturn;

 

    if (b == 1) myReturn = &val1;

    else if (b==2) myReturn = &val2;

    else if (b==3) myReturn = &val3;

    else myReturn = &val4;

 

    return myReturn;

 }

 

 struct MyStruct *strPointer;

 int     *c, *d;

 int     j;

 

 c = &j;                           /* pointer assigned using & operator */

 d = c;                            /* assign one pointer to another     */

 strPointer = ASillyFunction( 3 ); /* pointer returned from a function. */


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

نظرات بینندگان :

ایمیل :
نام :
نظر شما :
 
 
pop
مطالب تصادفی مرتبط