اشاره گرها: به چه چیزی اشاره می کنند؟

اشاره گرها یک مفهوم اساسی در برنامه نویسی C هستند که شما را قادر می سازد به طور مستقیم به حافظه دسترسی داشته باشید و آن را دستکاری کنید. درک اشاره گرها برای برنامه نویسی موثر و کارآمد C بسیار مهم است.
اشاره گر چیست؟
اشاره گر مقداری است که نشان دهنده آدرس حافظه است. به یک مکان حافظه خاص اشاره می کند و به شما امکان می دهد به مقدار ذخیره شده در آن مکان دسترسی داشته باشید و آن را تغییر دهید.
مثال پایه
int some_var = 4;
int *pointer_to_some_var = &some_var;
اینجا &some_var آدرس some_var است.
سمبل | تابع | مثال |
---|---|---|
some_variable | مقدار را در مکان خاصی از حافظه نگه می دارد | int x = 3; |
* | به آدرس حافظه یک متغیر خاص اشاره می کند | int *pX; |
& | مقدار آدرس متغیر زیر را نگه می دارد | &ایکس؛ |
نمادها | آنچه در آن نگه می دارد / به معنای |
---|---|
متغیر اعلام شده | مقدار متغیر |
اشاره گر به متغیر | |
مقدار متغیر اشاره شده به | آدرس متغیر(&) |
محل حافظه متغیر (به عنوان مثال: 0x7ffe2f14f97c) | نام خود اشاره گر (متغیر اشاره گر) |
آدرس حافظه اشاره گر (به عنوان مثال: 0x7ffe2f14f97c)
اشاره گرها به مدیریت مسائل حوزه کمک می کنند، به خصوص هنگام استفاده از توابع با ساختارها. با استفاده از نشانگرها، می توانید به متغیرهای خارج از محدوده توابع از طریق آدرس حافظه آنها دسترسی داشته باشید.
ما از اشاره گرها برای دسترسی به متغیرهای خارج از محدوده در توابع با ارائه اشاره گر به آدرس حافظه چنین متغیری (یا ساختار) استفاده می کنیم.
#include
#include
struct employee_type
{
int id;
int income;
bool staff;
};
void initialize_employee(struct employee_type *e){
e->id = 0;
e->income=0;
e->staff=true;
return;
}
int main(){
struct employee_type Ralph;
initialize_employee(&Ralph);
printf("%d", Ralph.income);
}
از حالت تمام صفحه خارج شوید
-
دام های رایجاشاره گرهای بدون مقدار اولیه
-
: همیشه نشانگرها را مقداردهی اولیه کنید. یک اشاره گر بدون مقدار اولیه به یک مکان حافظه تصادفی اشاره می کند که منجر به رفتار نامشخص می شود.اشاره گرهای آویزان
-
: از اشاره گر به حافظه ای که آزاد شده یا خارج از محدوده است استفاده نکنید.حساب اشاره گر
: مراقب محاسبات اشاره گر باشید تا از دسترسی خارج از محدوده به حافظه خودداری کنید.