اشاره گرها و آدرس های ارسالی به تابع در برنامه نویسی C
در این آموزش به کمک مثال های مختلف با شیوه ارسال آدرس ها و اشاره گرها به عنوان آرگومان به تابع آشنا خواهید شد. در برنامه نویسی C می توانید آدرس ها را به عنوان آرگومان به تابع ارسال کنید.
برای گرفتن آدرس در تعریف تابع، از اشاره گرها استفاده می شود. به دلیل اینکه اشاره گرها می توانند آدرس را در خود ذخیره کنند.
مثال: ارسال آدرس ها به تابع
#include <stdio.h>
void swap(int *n1, int *n2);
int main()
{
int num1 = 5, num2 = 10;
// ارسال آدرس به تابع
swap( &num1, &num2);
printf(“num1 = %dn”, num1);
printf(“num2 = %d”, num2);
return 0;
}
void swap(int* n1, int* n2)
{
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
خروجی
num1 = 10
num2 = 5
آدرس های num1 و num2 با استفاده از دستور swap(&num1, &num2); به تابع swap() ارسال می شوند.
اشاره گرهای n1 و n2 این آرگومان ها را در تعریف تابع پذیرش می کنند.
void swap(int* n1, int* n2) {
… ..
}
با تغییر *n1 و*n2 در داخل تابع ()swap ، مقادیر num1 و num2 نیز در داخل تابع ()main تغییر می کنند.
*n1 و*n2 در تابع ()swap جابجا شده اند، در نتیجه num1 و num2 نیز جابجا می شوند.
توجه داشته باشید که تابع ()swap هیچ مقداری بر نمی گرداند و نوع بازگشتی آن void است.
مثال ۲: ارسال اشاره گرها به تابع
#include <stdio.h>
void addOne(int* ptr) {
(*ptr)++; // اضافه می کند *ptr یک واحد به
}
int main()
{
int* p, i = 10;
p = &i;
addOne(p);
printf(“%d”, *p); // 11
return 0;
}
در اینجا، مقدار ذخیره شده در i، *p ابتدا برابر ۱۰ می باشد سپس اشاره گر p به تابع ()addOne ارسال شده است. در تابع ()addOne، اشاره گر ptr این آدرس را می گیرد. در داخل تابع مقدار ذخیره شده در آدرسی که ptr به آن اشاره می کند، با دستور (*ptr)++;یک واحد افزایش می یابد. چون هر دو اشاره گر ptr و p آدرس یکسانی دارند پس *p در ()main نیز برابر با ۱۱ شده است.