noimage

İçeriği Paylaş:

İşaretçiler ve Yapılar

1.6. İşaretçiler ve YapılarBir işaretçi işleve parametre olarak gönderildiğinde basit değişken gibideğişkenin kopyası alınıp gönderiliyordu. Yapının büyük olduğudurumlarda bu da sorun çıkartır. İşaretçinin bir yapı verisini göstermesi.struct ogrenci{char no[10];int notu;};struct ogrenci *aTanımlamasında a değişkenini oluşturan alanlara erişmek için, bilinenyol:*a.notu=56;strcpy((*a).no, ʺ95001ʺ);Bunun farklı kullanımı:a‐>notu=56;strcpy(a‐>no, ʺ95001ʺ);Örnek : Yapının adresinin işleve gönderilmesi.#include <stdio.h>#include <conio.h>typedef struct {char adi[35];char adres1[40];char adres2[40];char tel[15];float borc;} kisiler;void yaz(kisiler *z);int main(){kisiler a;printf(ʺAdını gir : ʺ); gets(a.adi);printf(ʺAdres‐1 : ʺ); gets(a.adres1);printf(ʺAdres‐2 : ʺ); gets(a.adres2);printf(ʺTelefonu : ʺ); gets(a.tel);printf(ʺBorcu : ʺ); scanf(ʺ%fʺ, &(a.borc));yaz(&a);getch();return 0;}void yaz(kisiler *z){printf(ʺAdı : ʺ); puts(z‐>adi);printf(ʺAdresi : ʺ); puts(z‐>adres1);printf(ʺ : ʺ); puts(z‐>adres2);printf(ʺTelefonu : ʺ); puts(z‐>tel);printf(ʺBorcu : ʺ); printf(ʺ%.0fʺ, z‐>borc);}1.7. Dizilerde Dinamik Bellek KullanımıÜç boyutlu dizi tanımı ve kullanımı için aşağıdaki parametreleriÜç boyut ‐‐> Gerilim ‐ Akım ‐ ZamanÖrnek : Tek boyutlu diziyi üç boyutlu gibi kullanma./* Üç boyutlu dinamik dizi kullanımı. Her boyut farklı uzunluktaDizi tek boyutlu gözüküyor. Ancak indis, hesaplanarak bulunuyorYani*(a + i*y*z + j*z +k)^ ^^ ^ 3. boyutun uzunluğu^2. boyutun uzunluğuşeklinde kullanılabilir.*/#include <stdio.h>#include <conio.h>#define x 4#define y 5#define z 9void matris_yaz(int *);int main(){int *a;int i, j, k;a=(int *) malloc(x * y * z * sizeof(int));// eleman sayisi kadar yer acfor (i=0; i<x; i++) {printf(ʺi = %d ʺ, i);for (j=0; j<y; j++) {for (k=0; k<z; k++) {*(a + i*y*z + j*z +k) = i*j*k;printf(ʺ%5d ʺ,*(a + i*y*z + j*z +k));}printf(ʺʺ);}}matris_yaz(a);getch();return 0;}void matris_yaz(int *m){int i, j, k;printf(ʺʺ);getch();for (i=0; i<x; i++) {printf(ʺi = %d ʺ, i);for (j=0; j<y; j++) {for (k=0; k<z; k++) {printf(ʺ%5d ʺ,*m);*m++;}printf(ʺʺ);}getch();}}Örnek :/* Uc boyutlu dinamik dizi kullanimi. Her boyut farkli uzunluktaBu yontem ile diziye normal dizi gibi erismek mumkunYania[i][j][k]seklinde kullanilabilir.*/#include <stdio.h>#include <conio.h>#define x 8#define y 4#define z 10main(){double ***a;int i,j,k;a=(double *) malloc(x*sizeof(double*));/* 1. boyut icin yer ayir(işaretçiler) */for (i=0; i<x; i++) /* 2. boyut icin yer ayir. (işaretçiler) */*(a+i)=(double *) malloc(y*sizeof(double*)); /* 1. boyutun herelemani n *//* elemanli diziyi gosterir */for (i=0; i<x; i++) /* 3. boyut icin yer ayir (matrisin elemanlar) */for (j=0; j<y; j++)*(*(a+i) + j) = (double *) malloc(z*sizeof(double));for (i=0; i<x; i++)for (j=0; j<y; j++)for (k=0; k<z; k++)*(*(*(a + i) + j) + k) = i*j*k;for (i=0; i<x; i++) {printf(ʺi = %d ʺ, i);for (j=0; j<y; j++) {for (k=0; k<z; k++)printf(ʺ%4.1f ʺ,a[i][j][k]);printf(ʺʺ);}getch();}} 

İçeriği Paylaş:
İlginizi Çekebilir
Yorum Yapılmamış

Henüz Hiç Yorum Yapılmadı..

Yorum Yaz

İşaretçiler ve Yapılar

Programlama 2

16/07/2016 | Yorum Yok | 27 | kucukakarsu