You are on page 1of 8

Hafta 8

Temel veri yapılarının birleştirilmesi ile oluşturulmuş tanımlamalı bir veri yapısıdır.

Yapı ismi

struct ogrenci
{
int no; ogrenci yapısının büyüklüğü :
char ad[20]; Yapı üyeleri
int not;
}; 4(int)*1 + 1(char)*20 + 4(int)*1 = 28 byte

(;) ile biter

1
#include <stdio.h> //DEVAMI
int main()
struct mesafe //yapı tanımlaması {
{ oda salon; //değişken tanımlaması
int metre; salon.en.metre=6;
float cm; salon.en.cm=20;
}; salon.boy.metre=5;
salon.boy.cm=27;
struct oda //yapı tanımlaması
{ float u=salon.en.metre + salon.en.cm/100;
mesafe en; float g=salon.boy.metre + salon.boy.cm/100;
mesafe boy;
}; printf(" Salon Alanı ..: %f metre kare dir.", u*g);
return 0;
}

//Fonksiyona struct gönderme işlemi //DEVAMI

#include "stdio.h" int main()


{
struct kare struct kare kare1;
{
int a; printf("karenin kenar uzunlugunu giriniz: ");
}; scanf("%d",&kare1.a);

int alan(struct kare r) printf("Karenin alani: %d", alan(kare1));


{
return r.a*r.a; return 0;
} }

2
• İşaretçiler, bellekteki belli bir adresi tutan değişkenlerdir.
• Adres, bellekteki bir verinin yerini gösterir.
• İşaretçi kullanmak performans artışı sağlar.

• İşaretçiler tanımlanırken * operatörü kullanılır ve:


« veri tipi * değişken adı; » şeklinde tanımlanırlar.
 int *p; int* p; int * p; int*p;

*  adresteki veriyi gösterir  veri =*adres


&  adresi gösterir  adres = &veri

3
/* İşaretçi kullanımı */
#include<stdio.h>

int main()
{
int a=10;
int *p;
p=&a;

printf("%d’nin adresi %p dir\n", a, p );

printf("%d’nin adresi %p dir\n", *p, &a );

return 0;
}

/* İşaretçi kullanımı */
#include<stdio.h>

int main( )
{
int *p;
int x=555;

p=&x;

printf("x değeri %d ve adresi: %p \n", x, p);


printf("x değeri %d ve adresi: %p \n",*p, &x);

return 0;
}

4
/* İşaretçi kullanımı */ // Devamı
#include<stdio.h>
Px++;
int main( ) Py++;
{ Pz--;
int x=1, *Px; printf("Yeni adresler: %p, %p, %p dir\n", Px,Py,Pz);
float y=2.88,*Py; return 0;
short z=3, *Pz; }

Px=&x;
Py=&y;
Pz=&z;
printf("İlk adresler: %p, %p, %p \n",Px,Py,Pz);

• C++’ta diziler ve işaretçiler iç içedir. Çoğu yerde birbirlerinin yerine kullanılabilir.


• Bir dizinin ismi, o dizinin ilk elemanının bellek adresidir:

/*Diziler ve işaretçiler birbirlerinin yerine kullanılabilir */


#include<stdio.h>

int main( )
{
int dizi[5]={1,2,3,4,5};

for(int i=0;i<5;i++)
printf("%d \n", *(dizi+i) );

for(int i=0;i<5;i++)
printf("%p \n", (dizi+i) );
return 0;
}

5
/*İşaretçiler ve artırma operatörü */
#include<stdio.h>
Çıktı : ?
int main( )
{
int A[]={10,20,30,40};
int *ptr;
ptr=A; //ptr=&A[0];
printf("%d \n", *ptr );
printf("%d \n", ++*ptr );
printf("%d \n", *++ptr );
printf("%d \n", *ptr++ );
printf("%d \n", *ptr );

return 0;
}

#include<stdio.h>

int main()
{ Çıktı : ?
int sayi[5];
int *ptr;
ptr=sayi;

printf("%p \n", &sayi[0] );


printf("%p \n", ptr );
printf("%p \n", &sayi[1] );

ptr++;
printf("%p \n", ptr );
printf("%p \n", sayi+2 );

return 0;
}

6
//sayının karesini alan program
#include<stdio.h>

int kare(int *P); //P yazmasak da olur


Çıktı :
int main()
{
int sonuc;
int a;
printf("bir sayi giriniz :");
scanf("%d",&a);
sonuc=kare(&a);
printf("sayinin karesi : %d\n", sonuc);
return 0;
}

int kare(int *P)


{
return *P * *P;
}

#include <stdio.h> //DEVAMI


#include <math.h>
float * karekok(float *ptr)
float * karekok(float *); {
*ptr = sqrt(*ptr);
int main()
{ return ptr;
float sayi; }
float *p;

printf("karekoku alinacak sayi :");


scanf("%f", &sayi ); Çıktı :
p=karekok(&sayi);
printf("sayinin karekoku : %f",*p);
return 0;
}
DİKKAT:
Bu kod ile sayı değeri değişir! Karekökü olur!

7
//işaretçi ile atama vb: //DEVAMI
#include<stdio.h>
int main()
struct deneme { {
char ch; deneme x;
int sayi; deneme *p;
}; p=&x;

(*p).ch='a';
(*p).sayi=100;
printf("karakter = %c \n", x.ch);
printf("sayi = %d \n", x.sayi);
return 0;
}

Çıktı:

You might also like