PDA

View Full Version : اشاره گره ها ؟ ؟ ؟



amir.bakhtiari
شنبه 10 تیر 1391, 12:27 عصر
سلام

حقیقتش هر چی در مورد اشاره گر ها میخونم تو کتاب سایت و..... هیچی نمیفهمم , نمیفهمم که نه انگار درست توضییح ندادن که من متوجه بشم
اگه امکانش هست به سوالات من ج بدید:

اشاره گر چیست؟
چه کاربردی های داره؟
کجا ها و کی میتونیم استفاده کنم؟
اگه ازش استفاده نکنیم مشکلی پیش میاد؟چه برتری ای داره تو کد نویسیمون؟
منظور از اشاره گرهای void چیه؟ که کاربردی خواصی دار؟

اگه لطف کنید به زبان ساده توضییح بدید
خیلی ممنون

#target
شنبه 10 تیر 1391, 14:32 عصر
اشاره گر آدرش مکانی هست که داده مورد نظر در آن قرار دارد ! کاربردشم مختلفه ولی برای آدرس دهی کاربرد داره . ی داده رو میخوایم در چند جا بکار ببریم کافیه ی جا داخل حافظه بذاریم و در اون چند جا فقط بهش اشاره کنیم . حافظه پویا شما در حین اجرای برنامه ی حافظه نخصیص بدی باید با اشاره گر بهش دسترسی پیدا کنی. یا مثلا میخوای ارسال پارامتر کنیی ی پارامتر تابع چهار بایته . ولی اگر داده بزرگ باشه میتونی داده رو در ی جای حافطه قرار بدی اشاره گری به اون داده یا آدرس اون داده رو بفرستی به تابع
یا مثلا اشاره گر به ی تابع ! ی فایل DLL رو بارگذاری کنی و بخوای به ی تابع از اون فراخوانی کنی . چون تابع بصورت پویا اومده . اشاره گر به تابع میگیری و فراخوانی میکنی
اشاره گر void یعنی داده ای که داریم بهش اشاره میکنیم معلوم نیست چیه و هر چی میتونه داخلش باشه مثلا شما ی حافظه تخصیص میدین . اشاره گر از این نوع میگیرین.

Ananas
شنبه 10 تیر 1391, 14:38 عصر
سلام.
متغیر چیه؟ می دونی؟ اگه آره، اشاره گر یک ابزار برای دسترسی به متغیره.
برای تجزیه و تحلیل و کار با داده ها نیاز داریم که اطلاعاتمون رو جایی قرار بدیم که بتونیم هر لحظه که لازم شد ازش استفاده کنیم، از روش بخونیم و یا تغییرش بدیم. مثل پوشه ها و پرونده ها تو اداره ها که شماره داره. حالا اگه بخوایم مثلا فلان کاغذ و یا سند و یا اطلاعات رو پیدا کنیم باید شماره ی پوشه ی اون رو بدونیم بعد پوشه رو برداریم و کاغذ یا سندمون رو از توش پیدا کنیم. حالا بیا تو رم، هر قسمتی تو رم که بخوایم ازش استفاده کنیم یک آدرسی داره. و ما میتونیم تو اون آدرس اطلاعاتی رو داشته باشیم که با استفاده از اون شماره و آدرس میرسیم به اون اطلاعات (چه برای خوندن و چه برای تغییر).
حالا این آدرس و یا شماره هم خودش باید جایی روی رم به خودش اختصاص بده که مثلا می گیم خود اون شماره یا اشاره گر، متغیری هست که از نوع عدد صحیح ه. و مثلا 32 بیتی و یا 64 بیتی هست. حالا مثلا فرض کن متغییری داریم که یک ساختمان هست و اطلاعاتی در اون ساختمان کنار هم جمع شدن که کلا حجمشون مثلا بشه 512 بایت، اشاره گری به این ساختمان رو در نظر بگیر که حافظه ای اندازه ی سایز ساختمانمون بهش اختصاص دادیم، از نقطه شروع اون اشاره گر تا 512 بایت بعد از اون مربوط به اطلاعات یک متغیر از نوع ساختمانمون هست. حالا از طریق اون اشاره گر می تونیم اطلاعات این ساختمان رو بخونیم و یا دست کاری کنیم و در صورتی که دیگه کاری با ساختمانمون نداشتیم، اون قسمت از حافظه رو به سیستم برمیگردونیم و اگه دوباره لازم شد یک جای دیگه از حافظه ی رم رو براش درخواست میکنیم.
ممکنه آرایه ای (مجموعه عناصر پشت سر هم) از این ساختمان رو داشته باشیم که بازم از طریق یک اشاره گر به اولین عضو میتونیم به تک تک اون عناصر دسترسی داشته باشیم. در اینجا به عنوان آرایه میتونیم حافظه ای اندازه ی دو برابر حجم ساختمان و یا 3 برابر اون و یا n برابر اون رو به اشاره گر اختصاص بدیم که میگیم آرایه ی 2 و یا 3 و یا n عضوی.

مسعود اقدسی فام
شنبه 10 تیر 1391, 14:42 عصر
جواب این سوالایی که پرسیدین کمی مفصل‌تر از اینه که بشه همه رو اینجا نوشت.

نمی‌دونم این لینک رو مطالعه کردید یا نه؟ اشاره‌گرها در ++C (http://www.algorithmha.ir/post-%D8%A7%D8%B4%D8%A7%D8%B1%D9%87-%DA%AF%D8%B1-%D8%AF%D8%B1-%D8%B3%DB%8C-%D9%BE%D9%84%D8%A7%D8%B3-%D9%BE%D9%84%D8%A7%D8%B3.aspx)

مسعود اقدسی فام
شنبه 10 تیر 1391, 15:01 عصر
و البته بعضی کاربردها (توصیه می‌کنم به ترتیب بخونید):

1- آرایه پویا در ++C (http://www.algorithmha.ir/post-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D8%A7%DB%8C%D8%B3%D8%AA%D8%A7-%D9%88-%D9%BE%D9%88%DB%8C%D8%A7-%D8%AF%D8%B1-%D8%B3%DB%8C-%D9%BE%D9%84%D8%A7%D8%B3-%D9%BE%D9%84%D8%A7%D8%B3.aspx)

2- آرایه پویای دو بعدی در ++C

(http://www.algorithmha.ir/post-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D9%BE%D9%88%DB%8C%D8%A7%DB%8C-%D8%AF%D9%88-%D8%A8%D8%B9%D8%AF%DB%8C-%D8%AF%D8%B1-%D8%B3%DB%8C-%D9%BE%D9%84%D8%A7%D8%B3-%D9%BE%D9%84%D8%A7%D8%B3.aspx)3- لیست پیوندی (http://www.algorithmha.ir/post-%D9%84%DB%8C%D8%B3%D8%AA-%D9%BE%DB%8C%D9%88%D9%86%D8%AF%DB%8C.aspx)

vistacali
شنبه 10 تیر 1391, 15:38 عصر
برای اشاره گرها به لینک زیر بروید

Salar Ashgi
یک شنبه 11 تیر 1391, 14:51 عصر
ببنید در اینکه مفاهیم اشاره گر برای یه فرد مبتدی تازه کار درک کردنش سخته ، شکی نیست !
ولی دقت کنید که مفاهیم اشاره گر چیزی نیست که آدم بخواد مثل فرمول ریاضی فقط کتاب بخونه ،
چون اتفاقا تا زمانیکه عملی کار نکرده باشی ، هر چقدر کتاب بخونی ، بیشتر سردرگم میشی !
پس بهتره یک مفاهیم اولیه شو درک کرده و سراغ کد نویسی برید . به مرور با کاربردهاش هم آشنا می شید .

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

یک مثال خیلی ساده میزنم :



#include <iostream>
#include <conio>
int main(){

int x=4;
cout<<"Value of x : "<<x<<endl;
int *p=&x;
cout<<"Address of variable(x): "<<p<<endl;
cout<<"Value of x : "<<*p<<endl;
getch();
}


همونطور که تو عکس ضمیمه مشاهده می کنید :

متغیر x یه خونه ای هستش از حافظه RAM که مقدار این خونه 4

هست ، ولی می دونیم حافظه RAM تمام خونه هاش آدرس دارن ، خوب

الان آدرس این خونه رو هم گذاشتیم تو یه اشاره گری مثل p که مقدارش یک عدد(که یه آدرسه)

هگزادسیمال(در مبنای 16) چون با 0x شروع شده ! این شد مفهوم اشاره گر در بیان ساده.

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

ولی خوب اول باید همین base مطلب رو متوجه بشید .

این هم بدونید که عملگر * در اشاره گر ها بر دسترسی به مقدار خونه ای هست که اشاره گر

داره بهش اشاره میکنه و عملگر & برای بیان آدرس هست .

حالا این خود اشاره گر هم آدرسی تو حافظه داره ، یعنی میتونیم اشاره گر به اشاره گر هم داشته باشیم .



#include <iostream>
#include <conio>
int main(){

int x=4;
cout<<"Value of x : "<<x<<endl;
int *p=&x;
cout<<"Address of variable(x): "<<p<<endl;
cout<<"Value of x : "<<*p<<endl;
int **pp = &p;
cout<<"Address of pointer p : "<<pp<<endl;
cout<<"Address of pointer p : "<<&p<<endl;
getch();
}


متغیر pp اشاره گری هست که داره به اشاره گر p اشاره میکنه .

سعی کردم ساده توضیح بدم .

موفق باشید ./

amir.bakhtiari
یک شنبه 11 تیر 1391, 18:19 عصر
خیـــــــــــــــــــــــ ـــــــــلـــــــــــــــ ی مـمنونـ دوستان

برای اشاره گرها به لینک زیر بروید ؟؟؟؟؟؟؟؟؟؟