دسترسی به حافظه (Access Memory)
«دسترسی به حافظه (Access Memory)» یعنی خواندن و نوشتن داخل فضای رزروشده. حافظه پویا مثل آرایه رفتار می کند. نوع داده را «پوینتر (Pointer)» مشخص می کند. با نظم جلو برو تا باگ کمتر شود.
دسترسی به حافظه پویا
مثل آرایه، با «اندیس (Index)» عنصر را می گیری. اندیس از صفر شروع می شود. بنابراین با ptr[0] به اولین خانه می رسی.
ptr[0] = 12;
یا می توانی «دیرفرِنس (Dereference)» کنی. یعنی مستقیم به همان خانه اول اشاره کنی.
*ptr = 12;
نمونه: نوشتن و خواندن
چهار عدد صحیح رزرو کن، سپس مقداردهی و چاپ کن. این دقیقاً مثل آرایه است.
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr = NULL;
ptr = calloc(4, sizeof(*ptr));
*ptr = 2;
ptr[1] = 4;
ptr[2] = 6;
printf("%d\n", *ptr);
printf("%d %d %d\n", ptr[1], ptr[2], ptr[3]);
return 0;
}
نکته نوع داده
حافظه پویا خودش نوع ندارد. فقط بایت است. «نوع» را پوینتر تعیین می کند. بنابراین همان 4 بایت می تواند int یا چهار char دیده شود.
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr1 = malloc(4);
char *ptr2 = (char *)ptr1;
ptr1[0] = 1684234849;
printf("%d is %c %c %c %c\n", *ptr1, ptr2[0], ptr2[1], ptr2[2], ptr2[3]);
return 0;
}
گام های عملی
- حافظه را با
callocیاmallocبگیر. - با اندیس یا دیرفرِنس مقدار بده.
- با
printfنتیجه را بررسی کن. - برای تمرین بیشتر، صفحه اختصاص حافظه را ببین.
نکته: برای مرور مفاهیم مادر، صفحه مدیریت حافظه کاربردی است. اگر دنبال «دسترسی به حافظه» هستی، همین صفحه مرجع توست.
جمع بندی سریع
- حافظه پویا شبیه آرایه کار می کند.
- اندیس یا دیرفرِنس هردو معتبرند.
- نوع را پوینتر تعیین می کند.
- نمونه ها را در ادیتور اجرا کن.