اشارهگر خصوصیات بیشتری نسبت به ارجاع در دسترس برنامهنویس قرار میده که اگه حتماً به این خصوصیات نیاز دارید از اشارهگر استفاده کنین در غیر این صورت از ارجاع.
۱) اشارهگر میتونه NULL
باشه و NULL
بودنش قابل بررسی هست. مثلاً فرض کنید که تابع f
قراره با یه متغیر فراخوانی بشه. متغیر قراره در تابع تغییر کنه. بنابراین باید از اشارهگر یا ارجاع استفاده بشه. فرض کنید کاربر میتونه متغیر رو به تابع نده و در این صورت تابع خودش یه متغیر تولید کنه.
int* f(int *ptr = NULL)
{
if(ptr == NULL)
return new int(0);
*ptr = 2*(*ptr) + 1;
return NULL;
}
حالا تابع main
رو داریم
int main()
{
int x, *p1, *p2;
f(&X);
p1 = f(p2);
}
این که استفادههای پیچیدهای مثل این به ندرت اتفاق میافته درسته ولی به هرحال گاهی لازمه.
۲) اشارهگر میتونه تغییر کنه. یعنی داخل تابع میتونین خود اشارهگر رو تغییر بدین.
تابعی داریم که مقادیر یک آرایه رو تا وقتی به عدد خاصی برسیم چاپ میکنه
void f(int *ptr, int x)
{
while(*(ptr++) != x) cout<<*ptr<<" ";
}
این کار با ارجاع کمی کد بیشتری نیاز داره در برخی مواقع
در غیر این دو صورت همیشه از ارجاع استفاده کنین. چرا؟
۱) ارجاع در فراخوانی کد خواناتری تولید میکنه. (f(x)
به جای f(&x)
)
۲) ارجاع امکان دسترسی ناخواسته به آدرسهای غیرمجاز رو کمتر میکنه.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)