EEM-119 Algoritma ve Programlama I Dersi
2022-2023 Güz Dönemi Ders 13
İşaretçiler, işaretçilerin fonksiyon parametre ve dönüş değeri olarak kullanılması
#include <stdio.h>
int main(){
int a=20, b=30;
int *p, *q;
p=&a;
q=&b;
printf("a'nin adresi %u \n",&a);
printf("p'nin degeri %u \n",p);
printf("b'nin adresi %u \n",&b);
printf("q'nin degeri %u \n",q);
return 0;
}
a'nin adresi 3703186656
p'nin degeri 3703186656
b'nin adresi 3703186660
q'nin degeri 3703186660
#include <stdio.h>
int main(){
int a=20, b=30;
int *p, *q;
p=&a;
q=&b;
*p=50;
*q=70;
printf("a'nin degeri %u \n",a);
printf("b'nin degeri %u \n",b);
return 0;
}
a'nin degeri 50
b'nin degeri 70
#include <stdio.h>
int main(){
int a, b;
int *p, *q;
p=&a;
q=&b;
a=35;
b=45;
printf("p isaretcisinin isaret ettigi yerdeki deger: %u \n",*p);
printf("q isaretcisinin isaret ettigi yerdeki deger: %u \n",*q);
return 0;
}
p isaretcisinin isaret ettigi yerdeki deger: 35
q isaretcisinin isaret ettigi yerdeki deger: 45
#include <stdio.h>
int main(){
//isaretcilerin tanimlamalari tek satirdada yapilabilir.
int a, b, c, *p,*q;
int *isaretci=&c;
p=&b;
q=&a;
*p=15;
*q=16;
*isaretci=17;
printf("a:%d, b:%d c:%d",*q,*p, *isaretci);
return 0;
}
#include <stdio.h>
int main(){
int a,*p;
char b, *q;
double c, *m;
float d, *n;
// q=&a yanlis bir atamdir.
// isaretciye kendi turunde atama yapilabilir.
p=&a;
q=&b;
return 0;
}
#include <stdio.h>
int main(){
int a,b,*p=&a, *q=&b;
*p=25;
*q=35;
(*p)++;
(*q)++;
printf("a:%d, b:%d\n",a,b);
q=&a;
(*p)++;
(*q)++;
printf("a:%d, b:%d\n",a,b);
return 0;
}
#include <stdio.h>
int main(){
int a,b,*p=&a, *n=&b;
*p=25;
*n=35;
(*p)++;
(*n)++;
printf("a:%d, b:%d\n",a,b);
n=p;
printf("p'nin degeri: %u\n",p);
printf("n'nin degeri: %u\n",n);
printf("a'nin adresi: %u\n",&a);
(*p)++;
(*n)++;
printf("a:%d, b:%d\n",a,b);
return 0;
}
a:26, b:36
p'nin degeri: 4101352272
n'nin degeri: 4101352272
a'nin adresi: 4101352272
a:28, b:36
#include <stdio.h>
int main(){
int a,b,*p=&a, *n=&b;
*p=25;
*n=35;
(*p)++;
(*n)++;
printf("a:%d, b:%d\n",a,b);
*p=*n;
printf("p'nin degeri: %u\n",p);
printf("n'nin degeri: %u\n",n);
printf("a'nin adresi: %u\n",&a);
printf("b'nin adresi: %u\n",&b);
(*p)++;
(*n)++;
printf("a:%d, b:%d\n",a,b);
return 0;
}
a:26, b:36
p'nin degeri: 4174330816
n'nin degeri: 4174330820
a'nin adresi: 4174330816
b'nin adresi: 4174330820
a:37, b:37
işaretçilerin fonksiyon argümanı olarak kullanılması
#include <stdio.h>
void ayristir(double sayi, int tam_kismi, double kesir_kismi){
tam_kismi=(int)sayi;
kesir_kismi=sayi-tam_kismi;
}
int main(){
double x, kesir;
int tam;
printf("ondalikli bir sayi giriniz:");
scanf("%lf",&x);
ayristir(x,tam,kesir);
printf("x:%lf, tam:%d kesir:%lf\n",x,tam,kesir);
return 0;
}
/tmp/tmp2kn0va0t.c: In function ‘main’:
/tmp/tmp2kn0va0t.c:11:5: warning: ‘tam’ is used uninitialized in this function [-Wuninitialized]
11 | ayristir(x,tam,kesir);
| ^~~~~~~~~~~~~~~~~~~~~
/tmp/tmp2kn0va0t.c:11:5: warning: ‘kesir’ is used uninitialized in this function [-Wuninitialized]
ondalikli bir sayi giriniz:
10.5
x:10.500000, tam:0 kesir:0.000000
# include <stdio.h>
void ayristir(double sayi, int *tam_kismi, double *kesir_kismi){
*tam_kismi=(int)sayi;
*kesir_kismi=sayi-*tam_kismi;
}
int main(){
double x, kesir;
int tam;
printf("ondalikli bir sayi giriniz:");
scanf("%lf",&x);
ayristir(x, &tam, &kesir);
printf("x:%lf, tam:%d kesir:%lf\n",x,tam,kesir);
return 0;
}
ondalikli bir sayi giriniz:
10.5
x:10.500000, tam:10 kesir:0.500000
# include <stdio.h>
int ayristir(double sayi, double *kesir_kismi){
int tam_kismi;
tam_kismi=(int)sayi;
*kesir_kismi=sayi-tam_kismi;
return tam_kismi;
}
int main(){
double x, kesir;
int tam;
printf("ondalikli bir sayi giriniz:");
scanf("%lf",&x);
tam=ayristir(x, &kesir);
printf("x:%lf, tam:%d kesir:%lf\n",x,tam,kesir);
return 0;
}
ondalikli bir sayi giriniz:
20.7
x:20.700000, tam:20 kesir:0.700000
# include <stdio.h>
void maks_min(int dizi[], int boyut, int *maks, int *min){
int i;
*maks=dizi[0];
*min=dizi[0];
for(i=1;i<boyut;i++){
if(*maks<dizi[i])
*maks=dizi[i];
if(*min>dizi[i])
*min=dizi[i];
}
}
int main(){
int a[]={1,4,2,1,0,9,4,5,8,0};
int en_buyuk, en_kucuk;
maks_min(a, sizeof(a)/sizeof(a[0]), &en_buyuk,&en_kucuk);
printf("dizinin en buyuk elemani:%d\n",en_buyuk);
printf("dizinin en kucuk elemani:%d",en_kucuk);
return 0;
}
dizinin en buyuk elemani:9
dizinin en kucuk elemani:0
# include <stdio.h>
// eger a isaretcisi uzerinden parametere olarak gonderilen
// deger uzerinde herhangi bir degisiklik yapimasi istenmiyor ise
// void f(int *a) yerine asagidaki gibi kullanilir.
void f(const int *a){
*a=10;
}
int main(){
int x=20;
f(&x);
return 0;
}
/tmp/tmp4iswptd2.c: In function ‘f’:
/tmp/tmp4iswptd2.c:6:7: error: assignment of read-only location ‘*a’
6 | *a=10;
| ^
[C kernel] GCC exited with code 1, the executable will not be executed
# include <stdio.h>
void yer_degistir(int *degisken1, int * degisken2){
int temp;
temp=*degisken1;
*degisken1=*degisken2;
*degisken2=temp;
}
int main(){
int x=20,y=50;
printf("x: %d, y:%d\n",x,y);
yer_degistir(&x, &y);
printf("x: %d, y:%d\n",x,y);
return 0;
}
# include <stdio.h>
int *maks(int *a, int *b){
if(*a>*b)
return a;
return b;
}
int main(){
int x=60,y=50;
int *p;
p=maks(&x,&y);
printf("buyuk olan:%d\n",*p);
return 0;
}
# include <stdio.h>
int *ortadakini_bul(int a[], int n){
return &a[n/2];
}
int main(){
int x[]={1,2,3,0,3,7,5};
int *p;
p=ortadakini_bul(x, sizeof(x)/sizeof(x[0]));
printf("dizinin ortasindaki eleman:%d\n", *p );
return 0;
}
dizinin ortasindaki eleman:0