View Full Version : آدرس دهی؟
mohsenk
جمعه 20 خرداد 1384, 07:15 صبح
با سلام
سوالی داشتم در مورد اینکه آیامی شود به یک اشاره گر مستقیما آدرس داد؟
p=0x45f00245;
من هر چه این کارو کردم error گرفت؟؟؟؟؟؟؟
Inprise
جمعه 20 خرداد 1384, 18:27 عصر
معمولا" از اشاره گر برای ذخیره آدرس محل متغیرهای دیگر استفاده میشه فلذا با استفاده از & میتونی محتویات اشاره گرت رو به آدرس متغیر مورد نظرت تغییر بدی ؛ اگر نیازت چیزی غیر از اینه بیشتر در موردش توضیح بده تا جواب بهتری بگیری .
Babak-Aghili
جمعه 20 خرداد 1384, 18:48 عصر
p را از نوع اشاره گری گرفته اید یا نه ؟
mohsenk
یک شنبه 22 خرداد 1384, 07:02 صبح
می خوام یه آدرس مشخص را در یک اشارگر قرار بدهم؟؟؟؟؟؟؟؟
rezaTavak
یک شنبه 22 خرداد 1384, 19:32 عصر
سلام
دوست عزیز اینکار ممکن است منجر به قفل شدن کامپیوتر شود. بنابراین در این مورد محتاط باشید!
Inprise
دوشنبه 23 خرداد 1384, 00:38 صبح
خیر . منجر به قفل! شدن چیزی نخواهد شد .
اگر توضیح من رو خوندی قاعدتا" باید در مورد کاری که میخوای انجام بدی توضیح بیشتری میدادی تا بتونم کمک بهتری بکنم چون اغلب اشاره به یک آفست خاص از حافظه نیاز عمومی و کاربردی نیست ، یکی از راهها اینه :
void *pointer;
pointer = reinterpret_cast< void* > (0xAABBCC);
حالا Pointer به آفست 0xAABBCC فرضی اشاره میکنه . بعید میدونم این کل مشکلت رو حل کنه چون نحوهء استفاده از این اشاره گر روی محیط ویندوز با لینوکس متفاوته و تو توضیحی در مورد کاربردت ندادی .
rezaTavak
دوشنبه 23 خرداد 1384, 07:22 صبح
سلام
خیر . منجر به قفل! شدن چیزی نخواهد شد .
فرض کنید شما به یک قسمت حافظه دسترسی داشته باشید و اون را تغییر بدهید در این صورت منجر به قفل حافظه میشود. چون ممکن است آن قسمت جز جای اجرایی یک برنامه باشد.
اما اگر برای فقط خواندن باشد مشکلی ندارد.
Inprise
دوشنبه 23 خرداد 1384, 14:05 عصر
پروسه ها فقط به فضای آدرسی خودشون دسترسی دارند و نوشتن تو این فضا باعث پدیده مجهولی ؟! بنام قفل شدن حافظه نخواهد شد ؛ بگذریم که اینجا بحث اشاره گر است نه چیز دیگه .
aakh1361
سه شنبه 24 خرداد 1384, 12:10 عصر
unsigned char * Scr = (unsigned char *) 0xA0000000;
با این روش میشه یک متغییر رو به آدرسی خاص از حافضه اشاره داد
این مثال متغییر رو به آدرس صحفه نمایش اشاره می دهد
unsigned char * Scr = (unsigned char *) 0xA0000000;
int XX,YY,fx,fy;
void SetPixel(int X,int Y,unsigned char c)
{
if (X>XX)return;
if (Y>YY)return;
if (X<=0)return;
if (Y<=0)return;
*(Scr+X+(Y*XX))=c;
};
void main()
{
// Enable Mode 13 Graph
asm mov ax,0x13
asm int 0x10
// Size Screen 13
XX=320-1; // 319
YY=200-1; // 199
// Draw Line Color
for (fy=0;fy<YY;fy++)
{
for (fx=0;fx<XX;fx++)
{
SetPixel(fx,fy,fy);
}
}
// Press A Key
asm xor ax,ax
asm int 0x16
// Enable Mode 3 Text
asm mov ax,0x3
asm int 0x10
};
البته تستش نکردم ولی کار می کنه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.