ارتباط بین آرایه ها و اشاره گرها در برنامه نویسی C
در این آموزش با ارتباط بین آرایه ها و اشاره گرها در برنامه نویسی C آشنا خواهید شد. همچنین می توانید با استفاده از اشاره گرها به عناصر آرایه دسترسی پیدا کنید.
اما قبل از این حتماً دو آموزش زیر را مرور کنید:
- آرایه ها در برنامه نویسی C
- اشاره گرها در برنامه نویسی C
ارتباط بین آرایه ها و اشاره گرها
یک آرایه بلوکی از داده های کنار هم و متوالی است. برنامه زیر برای چاپ آدرس عناصر آرایه است،
#include <stdio.h>
int main() {
int x[4];
int i;
for(i = 0; i < 4; ++i) {
printf(“&x[%d] = %pn”, i, &x[i]);
}
printf(“Address of array x: %p”, x);
return 0;
}
خروجی
&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448
بین دو عنصر متوالی درآرایه x به اندازه ۴ بایت تفاوت وجود دارد. چون اندازه داده int برابر با ۴ بایت است (در این کامپایلر). توجه داشته باشید که آدرس برای
&x[0] و x
یکسان است. زیرا نام متغیر x به اولین عنصر آرایه اشاره می کند. در مثال بالا این موضوع کاملا مشخص است و [x[0 نیز معادل *x است.
به طور مشابه،
- [x[1& معادل x + 1 و [x[1 معادل (x+1)* است.
- [x[2& معادل x + 2 و [x[2 معادل (x+2)* است.
- …
- به طور کلی [x[i& معادل x + i و [x[i معادل *(x+i) است.
مثال ۱: اشاره گرها و آرایه ها
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf(“Enter 6 numbers: “);
for(i = 0; i < 6; ++i) {
// است. scanf(“%d”, &x[i]); با
scanf(“%d”, x+i);
// است sum += x[i] با
sum += *(x+i);
}
printf(“Sum = %d”, sum);
return 0;
}
خروجی
Enter 6 numbers: 2
۳
۴
۴
۱۲
۴
Sum = 29
در این برنامه، آرایه x دارای ۶ عنصر است و برای دسترسی به عناصر آن از اشاره گرها استفاده شده است.
در بیشتر موارد نام آرایه ها به اشاره گرها تبدیل می شوند. به همین دلیل می توانید از اشاره گر برای دسترسی به عناصر آرایه استفاده کنید. با این حال باید توجه داشته باشید که اشاره گرها و آرایه ها یکسان نیستند.
چندین مورد وجود دارد که نام آرایه نمی تواند به اشاره گر تبدیل شود.
مثال ۲: آرایه ها و اشاره گرها
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ذخیره می شود ptr آدرس سومین عنصر آرایه در
ptr = &x[2];
printf(“*ptr = %d n”, *ptr); // 3
printf(“*(ptr+1) = %d n”, *(ptr+1)); // 4
printf(“*(ptr-1) = %d”, *(ptr-1)); // 2
return 0;
}
خروجی
*ptr = 3
*(ptr+1) = 4
*(ptr-1) = 2
در این مثال، [x[2& یعنی آدرس عنصر سوم به اشاره گر ptr اختصاص داده شده است. بنابراین، ptr* عدد ۳ را نمایش می دهد. به همین ترتیب (ptr+1)* مقدار عنصر چهارم و (ptr-1)* مقدار عنصر دوم آرایه را برمی گردانند.