روش کار اشاره گر در سی

آموزش اشاره گرها در برنامه نویسی C

در این آموزش با مفهوم اشاره گرها در برنامه نویسی C آشنا خواهید شد. معرفی اشاره گرها، شیوه استفاده از اشاره گرها و اشتباهات رایج هنگام کار با آنها را با کمک مثال های مختلف بررسی خواهیم کرد.

اشاره گرها از ویژگی های قدرتمند زبان های برنامه نویسی C و C++ هستند. قبل از یادگیری اشاره گرها، در مورد آدرس ها در برنامه نویسی C صحبت خواهیم کرد.

 


برنامه نویسی شبکه معماری کامپیوتر هوش مصنوعی و تجاری

توی این پک فوق العاده، صفرتاصد مبانی برنامه نویسی رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با صفرتاصد مبانی برنامه نویسی اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

آدرس ها در زبان C

فرض کنید در برنامه خود یک متغیر به نام var دارید،var & حاوی آدرس این متغیر در حافظه است. هنگام استفاده از تابع ()scanf از آن استفاده می کنیم.

scanf(“%d”, &var);

در اینجا، مقدار وارد شده توسط کاربر در آدرس متغیر var ذخیره می شود. مثال،

#include <stdio.h>

int main()

{

int var = 5;

printf(“var: %d\n”, var);

// قبل از نام متغیر می آید &

printf(“address of var: %p”, &var);

return 0;

}

خروجی

var: 5

address of var: 2686778

نکته: با اجرای کد بالا آدرس های متفاوتی روی هر سیستم نمایش داده می شود.

اشاره گرهای C

اشاره گرها (متغیرهای اشاره گر) متغیرهای خاصی هستند که به جای ذخیره مقادیر برای ذخیره آدرس استفاده می شوند.

ساختار اشاره گر

نحوه تعریف اشاره گرها در زبان C:

int* p;

در اینجا یک اشاره گر p از نوع int تعریف شده است.

به شکل های زیر نیز می توانید اشاره گرها را تعریف کنید:

int *p1;

int * p2;

مثال دیگری از تعریف اشاره گرها را ببینیم،

int* p1, p2;

یک اشاره گر با نام p1 و متغیر عادی p2 تعریف شده است.

تخصیص آدرس به اشاره گر

مثال زیر را ببینید،

int* pc, c;

c = 5;

pc = &c;

در اینجا مقدار ۵ به متغیر c و آدرس متغیر c به اشاره گر pc اختصاص داده شده است.

به دست آوردن مقدار ذخیره شده در آدرس قرار گرفته در اشاره گر

برای به دست آوردن مقدار اشاره شده توسط اشاره گرها از عملگر * استفاده می کنیم. مثال:

int* pc, c;

c = 5;

pc = &c;

printf(“%d”, *pc); // Output: 5

در اینجا آدرس c در اشاره گر pc قرار داده شده و برای به دست آوردن مقدار ذخیره شده در این آدرس از *pc استفاده شده است.

نکته: در مثال بالا pc یک اشاره گر است نه *pc. نمی توانید و نباید مشابه کد *pc = &c را بنویسید.

عملگر *، عملگر ارجاع نامیده می شود (هنگام کار با اشاره گرها). مقدار ذخیره شده در آدرس اشاره گر را برمی گرداند.

تغییر مقدار ذخیره شده در آدرس قرار گرفته در اشاره گر

بیایید یک مثال بزنیم،

int* pc, c;

c = 5;

pc = &c;

c = 1;

printf(“%d”, c); // خروجی: ۱

printf(“%d”, *pc); // خروجی: ۱

آدرس متغیر c در اشاره گر pc قرار گرفته و در ادامه مقدار c به ۱ تغییر یافته است. چون pc حاوی آدرس c می باشد در نتیجه با تغییر مقدار c، مقدار *pc نیز به طور مشابه تغییر می کند و *pc مقدار ۱ را برمی گرداند.

یک مثال دیگر،

int* pc, c;

c = 5;

pc = &c;

*pc = 1;

printf(“%d”, *pc); // خروجی: ۱

printf(“%d”, c); // خروجی: ۱

آدرس متغیر c در اشاره گر pc قرار گرفته شده سپس *pc = 1; نوشته شده است. چون pc حاوی آدرس c می باشد در نتیجه مقدار c نیز تغییر می کند و برابر با ۱ می شود.

یک مثال دیگر،

int* pc, c, d;

c = 5;

d = -15;

pc = &c; printf(“%d”, *pc); // خروجی: ۵

pc = &d; printf(“%d”, *pc); // خروجی: -۱۵

آدرس c با دستور ;pc = &c در اشاره گر pc ذخیره شده است. بنابراین، چون مقدار c برابر با ۵ است پس *pc نیز ۵ برمی گرداند.

به همین ترتیب آدرس d با دستور ;pc = &d در اشاره گر pc ذخیره شده است. به دلیل اینکه مقدار d برابر با ۱۵- است پس *pc نیز ۱۵- را نشان می دهد.

مثال: کار با اشاره گرها

#include <stdio.h>

int main()

{

int* pc, c;

c = 22;

printf(“Address of c: %p\n”, &c);

printf(“Value of c: %d\n\n”, c); // 22

pc = &c;

printf(“Address of pointer pc: %p\n”, pc);

printf(“Content of pointer pc: %d\n\n”, *pc); // 22

c = 11;

printf(“Address of pointer pc: %p\n”, pc);

printf(“Content of pointer pc: %d\n\n”, *pc); // 11

*pc = 2;

printf(“Address of c: %p\n”, &c);

printf(“Value of c: %d\n\n”, c); // 2

return 0;

}

خروجی

Address of c: 2686784

Value of c: 22

Address of pointer pc: 2686784

Content of pointer pc: 22

Address of pointer pc: 2686784

Content of pointer pc: 11

Address of c: 2686784

Value of c: 2

 توضیح برنامه

int* pc, c;

A pointer variable and a normal variable is created.

در اینجا اشاره گر pc و متغیر معمولی c، هر دو از نوع int تعریف می شوند. چون pc و c مقداردهی اولیه نشده اند در نتیجه pc یا به هیچ آدرسی اشاره نمی کند یا دارای یک آدرس تصادفی است. متغیر c آدرس دارد اما حاوی یک مقدار زباله (مقدار پاک شده) تصادفی است.

c = 22;

22 is assigned to variable c. در متغیر c مقدار ۲۲ ذخیره شده است. در واقع این مقدار در مکان متغیر c در حافظه قرار گرفته است.

pc = &c;

Address of variable c is assigned to pointer pc.

آدرس متغیر c به اشاره گر pc اختصاص داده شده است.

c = 11;

11 is assigned to variable c.

مقدار متغیر c به ۱۱ تغییر یافته است.

*pc = 2;

5 is assigned to pointer variable's address.

مقدار مکانی که آدرس آن در اشاره گر pc ذخیره شده برابر با ۲ شده است.

اشتباهات رایج هنگام کار با اشاره گرها

فرض کنید می خواهید اشاره گر pc به آدرس c اشاره کند. پس،

int c, *pc;

// نه c آدرس است اما pc

pc = c; // خطا

// نه *pc آدرس است اما &c

*pc = &c; // خطا

// هر دو آدرس هستند pc و &c

pc = &c;

// هر دو مقدار هستند *pc و c

*pc = c;

مثال زیر اغلب از نظر گرامری برای افراد مبتدی گیج کننده است.

#include <stdio.h>

int main() {

int c = 5;

int *p = &c;

printf(“%d”, *p); // 5

  return 0;

}

چرا هنگام استفاده از ;int *p = &c خطا رخ نداد؛ چون دستور

int *p = &c;

معادل دستورات زیر است:

int *p:

p = &c;

در هر دو حالت یک اشاره گر با نام p (نه *p) ساخته و c& به آن اختصاص داده شده است.

برای جلوگیری از این سردرگمی می توانید از دستور زیر استفاده کنید:

int* p = &c;

با اشاره گرها آشنا شدید، در آموزش بعدی ارتباط اشاره گرها با آرایه ها را بررسی خواهیم کرد.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in,

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

2 دیدگاه. ارسال دیدگاه جدید

  • امیر حسین عیوض پور ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌
    تیر 16, 1402 8:20 ق.ظ

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

    پاسخ
  • عالیییی بود واقعا مفید بود..

    پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست