PDA

View Full Version : سوال: ادرس حافظه



hafez1
شنبه 11 آذر 1391, 08:56 صبح
اگه من یه کلاسی داشته باشم مثلا


student
{
string name;
string familyname;
}

فرض کنید که ما مثلا یه تعدادی دانش آموز داریم که می خایم عضو کلاس student باشن.
مثلا ali ahmadi,reza farzan,.... وقتی اینا به عنوان یه شی از کلاس در نظر گرفته بشن من چطور می تونم به آدرس حافظشون دسرسی پیدا کنم؟

Ananas
شنبه 11 آذر 1391, 09:41 صبح
یا متغیری از نوع student دارید که با گذاشتن عملگر & قبل از متغیر از نوع student، به آدرس اون متغیر دسترسی پیدا میکنی و یا اینکه متغیر رو از نوع "اشاره گر به student" انتخاب میکنی و بعد با new براش حافظه میگیری و بعد از تموم شدن کار، با delete حافظه ی گرفته شده رو آزاد میکنی. که این اشاره گر به student مقدارش، آدرس حافظه ای هست که می خواستی.

hafez1
شنبه 11 آذر 1391, 11:24 صبح
ببینید من تک تک آدرسا رو می خام ینی آدرس ali,reza و... رو تک تک نیاز دارم این طوری که شما می گید می شه؟
بدون اشاره گرا نمی شه نوشت؟
مثلا این کدو ببینید


#include<iostream>
using namespace std;
int main()
{
int A;
A='d';
int addr=&A;
return 0;
}

ولی این ارورم داره

omidshaman
شنبه 11 آذر 1391, 11:41 صبح
خوب نمیشه که int رو به ptr نسبت داد!! باید از اشاره گر استفاده بشه!
و اره میشه ! اگر مشکل داری کل کدتو بزار...

#include<iostream>
using namespace std;
int main()
{
int A;
A='d';
int *addr=&A;
cout<<"meghdar avalie "<<A<<endl;
*addr=2;
cout<<"adres hafeze A "<<addr<<endl;
cout<<"meghdar bad az tagheer gheir mostaghim "<<A<<endl;
return 0;
}

H_G_G_I
شنبه 11 آذر 1391, 11:53 صبح
میشه ولی خب مگه اشاره گر چشه !

float f = 0.001;
int addressint = (int)&f;
size_t addressuint = (size_t)&f;
printf("%d %d %d \n", &f, addressint, addressuint);
float* pf = (float*) addressint;
*pf = 100.0f;
printf("%f", f);

hafez1
یک شنبه 12 آذر 1391, 16:37 عصر
دوست عزیز می شه کدتونو توضیح بدبد

H_G_G_I
یک شنبه 12 آذر 1391, 19:54 عصر
اشاره گر ادرس یه قسمتی از حافه هست !
تو سیستم 32 بیتی 32 بیت جا می گیره و تو 64 بیتی هم 64 بیته !
ادس حافظه از صفر شروع می شه تا n تا .
پس می شه اون رو در int , unsigned int , size_t, intptr, ... ذخیره کرد .
نوع اشاره گر هم (int , char , ...) در واقع رفتار کامپیلر ر و نسبت به اشاره گر مشخص می کنه .
شما تو این کد

int A;
A='d';
int addr=&A;

اگه قبل &A می نوشتی (int) مشکلی پیش نمی امد.
ادرس متغییر A تو int ذخیره می شد.
-
منم تو کدهام همین جور کارا رو کردم .

شما می تونید به صورت دستی هم به یه اشاره گر مقدار بدین مثلا این به خونه 1020 حافظه اشاره می کنه .

int* ptrint = (int*) 1020;

و این طوری هم میشه مقدار اون قسمت از حافظه رو تغییر داد.

*ptrint = 4;

البته این خطا می ده چون سیستم عامل اجازه نمی ده هرجا از حافظه که عشقمون کشید رو دست کاری کنیم !