Bu öğreticide, C programlamasında yapı üyelerine erişmek için işaretçileri kullanmayı öğreneceksiniz. Ayrıca yapı türlerinin belleğini dinamik olarak ayırmayı da öğreneceksiniz.
İşaretçilerin yapılarla nasıl kullanılabileceğini öğrenmeden önce şu eğiticileri kontrol ettiğinizden emin olun:
- C İşaretçiler
- C yapısı
Yapılandırılacak C İşaretçiler
Yapılar için nasıl işaretçi oluşturabileceğiniz aşağıda açıklanmıştır.
struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )
Burada ptr bir göstericidir struct
.
Örnek: İşaretçiyi kullanarak üyelere erişin
İşaretçileri kullanarak bir yapının üyelerine erişmek için ->
operatörü kullanırız .
#include 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:"); printf("Age: %d", personPtr->age); printf("weight: %f", personPtr->weight); return 0; )
Bu örnekte, person1'in adresi kullanılarak personPtr işaretçisinde saklanır personPtr = &person1;
.
Şimdi, personPtr
işaretçiyi kullanarak person1 üyelerine erişebilirsiniz .
Bu arada,
personPtr->age
eşdeğerdir(*personPtr).age
personPtr->weight
eşdeğerdir(*personPtr).weight
Yapıların dinamik bellek tahsisi
Bu bölüme devam etmeden önce, C dinamik bellek tahsisini kontrol etmenizi öneririz.
Bazen, beyan ettiğiniz yapı değişkenlerinin sayısı yetersiz olabilir. Çalışma zamanı sırasında bellek ayırmanız gerekebilir. C programlamada bunu nasıl başarabileceğiniz aşağıda açıklanmıştır.
Örnek: Yapılar için dinamik bellek tahsisi
#include #include 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); // allocating memory for n numbers of struct person ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i name and ptr->age is used // To access members of 2nd struct person, // (ptr+1)->name and (ptr+1)->age is used scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); ) printf("Displaying Information:"); for(i = 0; i name, (ptr+i)->age); return 0; )
Programı çalıştırdığınızda, çıktı:
Kişi sayısını girin: 2 Sırasıyla adı ve yaşı girin: Harry 24 Sırasıyla adı ve yaşı girin: Gary 32 Görüntüleme Bilgileri: İsim: Harry Yaş: 24 İsim: Gary Yaş: 32
Yukarıdaki örnekte, n kullanıcı tarafından girilen n sayıda yapı değişkeni oluşturulmuştur.
Hafızayı n sayıda yapı insanı için ayırmak için kullandık,
ptr = (struct person*) malloc(n * sizeof(struct person));
Ardından, kişinin öğelerine erişmek için ptr işaretçisini kullandık.