C yapıları ve İşaretçiler (Örneklerle)

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, personPtriş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.

Ilginç makaleler...