ساختارها و اشاره گرها در برنامه نویسی C
در این آموزش یاد خواهید گرفت که چگونه با استفاده از اشاره گرها به اعضای ساختارها در برنامه نویسی C دسترسی پیدا کنید. همچنین با تخصیص حافظه پویای ساختار آشنا خواهید شد.
قبل از شروع درباره استفاده از اشاره گرها با ساختارها، آموزش های زیر را مرور کنید:
- اشاره گرها در برنامه نویسی C
- ساختارها در برنامه نویسی C
اشاره گر به ساختار در C
در اینجا شیوه تعریف اشاره گر به ساختار آورده شده است.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
در اینجا ptr یک اشاره گر به struct name است.
مثال: دسترسی به اعضای ساختار با استفاده از اشاره گر
برای دسترسی به اعضای یک ساختار با استفاده از اشاره گرها از عملگر <- استفاده می شود.
#include <stdio.h>
struct person
{
int age;
float weight;
};
int main()
{
struct person *personPtr, person1;
personPtr = &person1;
printf(“Enter age: “);
scanf(“%d”, &personPtr->age);
printf(“Enter weight: “);
scanf(“%f”, &personPtr->weight);
printf(“Displaying:n”);
printf(“Age: %dn”, personPtr->age);
printf(“weight: %f”, personPtr->weight);
return 0;
}
در این مثال، آدرس person1 با استفاده از دستور personPtr = &person1; در اشاره گر personPtr ذخیره می شود.
حالا می توانید با استفاده از اشاره گر personPtr به اعضای person1 دسترسی پیدا کنید.
- personPtr->age معادل (personPtr).age* است
- personPtr->weight معادل (personPtr).weight* است.
تخصیص حافظه پویا ساختارها
قبل از شروع این بخش توصیه می کنیم آموزش تخصیص حافظه پویا در برنامه نویسی C را بررسی کنید.
گاهی اوقات ممکنه تعداد متغیرهای تعریف شده از ساختار کافی نباشند، بنابراین باید در زمان اجرای برنامه حافظه تخصیص دهید. در مثال زیر شیوه انجام کار آورده شده است.
مثال: تخصیص حافظه پویا ساختارها
#include <stdio.h>
#include <stdlib.h>
struct person {
int age;
float weight;
char name[30];
};
int main()
{
struct person *ptr;
int i, n;
printf(“Enter the number of persons: “);
scanf(“%d”, &n);
// person از ساختار n تخصیص حافظه به تعداد
ptr = (struct person*) malloc(n * sizeof(struct person));
for(i = 0; i < n; ++i)
{
printf(“Enter first name and age respectively: “);
// person برای دسترسی به اعضای اولین ساختار,
// استفاده می شود ptr->name , ptr->age
// person برای دسترسی به اعضای دومین ساختار,
// استفاده می شود (ptr+1)->name , (ptr+1)->age
scanf(“%s %d”, (ptr+i)->name, &(ptr+i)->age);
}
printf(“Displaying Information:n”);
for(i = 0; i < n; ++i)
printf(“Name: %stAge: %dn”, (ptr+i)->name, (ptr+i)->age);
return 0;
}
خروجی
Enter the number of persons: 2
Enter first name and age respectively: Harry 24
Enter first name and age respectively: Gary 32
Displaying Information:
Name: Harry Age: 24
Name: Gary Age: 32
در مثال بالا، تعداد n متغیر از ساختار به صورت پویا ساخته شده است، n توسط کاربر وارد می شود.
ptr = (struct person*) malloc(n * sizeof(struct person));
سپس از اشاره گر ptr برای دسترسی به عناصر person استفاده شده است.