30 : Struct Tipinde Pointer
Bir struct değişkeni pointer olarak da tutulabilir. Bir önceki yazıda bir öğrenci bilgisi tutmayı görmüştük. Şimdi aynı kodda struct tipinde pointer kullanarak tekrar yazalım.
Pointer tipinde oluşturduğumuz struct için önce bellekten yer ayırıyorum ve bu ayrılan yerin düzgün oluşup oluşmadığını kontrol ediyorum. Bu bizim için bir koruma olacak.
Daha sonra bir önceki örnekteki gibi atamaları yapıyorum. Yalnız pointer kullandığım için nokta yerine -> işareti kullanarak elemanlara ulaşıyorum.
-> işareti kullanım olarak daha yaygın olduğu için bu şekilde kullanmak daha doğrudur. Okunması daha kolaydır.
Yazdırırken, atama yaparken her kullanımda, eğer structure pointer tipindeyse, elemanlara -> işareti ile ulaşılmaktadır.
#include <stdio.h>
#include <string.h>
typedef struct ogrenci
{
char ad[50];
char soyad[50];
int numara;
float not;
}ogrenci;
int main()
{
ogrenci *ogrenci1 = malloc (sizeof(struct ogrenci));
ogrenci *ogrenci2 = malloc (sizeof(struct ogrenci));
if (ogrenci1 == NULL || ogrenci2 == NULL)
{
printf("Ogrenciler olusturulamadi \n");
return 0;
}
strcpy(ogrenci1->ad, "ad1");
strcpy(ogrenci1->soyad, "soyad1");
ogrenci1->numara = 55;
ogrenci1->not = 3.5;
strcpy(ogrenci2->ad, "ad2");
strcpy(ogrenci2->soyad, "soyad2");
ogrenci2->numara = 77;
ogrenci2->not = 1.2;
printf("Ogrenci 1 adi : %s \n", ogrenci1->ad);
printf("Ogrenci 1 soyadi : %s \n", ogrenci1->soyad);
printf("Ogrenci 1 numarasi : %d \n", ogrenci1->numara);
printf("Ogrenci 1 notu : %g \n\n", ogrenci1->not);
printf("Ogrenci 2 adi : %s \n", ogrenci2->ad);
printf("Ogrenci 2 soyadi : %s \n", ogrenci2->soyad);
printf("Ogrenci 2 numarasi : %d \n", ogrenci2->numara);
printf("Ogrenci 2 notu : %g \n", ogrenci2->not);
free(ogrenci1);
free(ogrenci2);
return 1;
}
Pointer tipinde oluşturduğumuz struct için önce bellekten yer ayırıyorum ve bu ayrılan yerin düzgün oluşup oluşmadığını kontrol ediyorum. Bu bizim için bir koruma olacak.
Daha sonra bir önceki örnekteki gibi atamaları yapıyorum. Yalnız pointer kullandığım için nokta yerine -> işareti kullanarak elemanlara ulaşıyorum.
(*ogrenci2).not ile
ogrenci2->not kullanım olarak aynıdır.
-> işareti kullanım olarak daha yaygın olduğu için bu şekilde kullanmak daha doğrudur. Okunması daha kolaydır.
Yazdırırken, atama yaparken her kullanımda, eğer structure pointer tipindeyse, elemanlara -> işareti ile ulaşılmaktadır.
Yorumlar
Yorum Gönder