C programlamanın en çetrefilli en zorlanılan, zor anlaşılan konularından biri de pointer (işaretçi) yapısıdır. C'de pointer konusunu daha iyi anlamaya yardımcı olması amacıyla 20 tane örnek soruyu ve çözümünü aşağıda inceleyebilirsiniz. Çözümlere hemen geçmeden kendi çözümlerinizi denemeniz kavrama açısından daha faydalı olacaktır.
C'de pointer örnek sorular çözümler |
- Temel pointer tanımlamayı gösterecek bir C programı yazınız.
Konsolda beklenen çıktı:
Temel pointer tanımlama : a, b, ve c birer int tamsayi ve a = 10 d ise bir tam sayi pointer'i ve a'nin adresini tutuyor: 0x7ffdef83147c *d ile a'nin degerine ulasiyoruz a = 10 &a ile a'nin pointer adresine ulasiyoruz a = 0x7ffdef83147c &b ile b'nin pointer adresine ulasiyoruz : 0x7ffdef831478 &c ile c'nin pointer adresine ulasiyoruz : 0x7ffdef831474 &d ile d'nin pointer adresine ulasiyoruz : 0x7ffdef831468
- Pointerların nasıl kullanıldığını gösteren bir C programı yazınız.
Konsolda beklenen çıktı:
Pointer kullanimi: ab = int pointer'i, int m = 17 m'nin adresi : 0x7ffc8f3145a4 m'nin degeri : 17 m'nin adresi ab'ye atandı. ab'nin adresi : 0x7ffc8f3145a4 ab'nin icerigi : 17 m'ye 35 degeri atandi. ab'nin adresi : 0x7ffc8f3145a4 ab'nin icerigi : 35 ab'nin isaret ettigi degiskenin degeri 8 olarak atandi. m'nin adresi: 0x7ffc8f3145a4 m'nin degeri : 8
- & (Adresi) ve * (adresteki değer) operatörünün kullanımını göstermek için bir C programı kodu yazınız.
Konsolda beklenen çıktı:
& (Adresi) ve * (adresteki deger) operatorunun kullanimi : m = 200 fx = 200.600006 cht = z & operator kullanimi : ----------------------- m'nin adresi= 0x7ffe069f1234 fx'in adresi = 0x7ffe069f1230 cht'nin adresi = 0x7ffe069f122f & ve * operator kullanimi : ----------------------------- m'nin adresindeki deger = 200 fx'in adresindeki deger = 200.600006 cht'nin adresindeki deger = z Sadece pointer kullanimi : ---------------------------------- m'nin adresi = 0x7ffe069f1234 fx'in adresi = 0x7ffe069f1230 cht'nin adresi = 0x7ffe069f122f Sadece pointer operatorunun kullanimi : ---------------------------------- m'nin adresindeki deger = 200 fx'in adresindeki deger = 200.600006 cht'nin adresindeki deger = z
- Pointer'ları (işaretçileri) kullanarak 2 sayıyı toplayan bir C program kodu yazınız. Girdi olarak konsoldan iki sayı okuyunuz.
Konsolda beklenen çıktı:
iki sayiyi toplama : -------------------------------- ilk sayiyi giriniz : 45 ikinci sayiyi giriniz : 67 Girilen sayilarin toplami : 112
- Call by reference (referansla çağrı) kullanarak iki sayıyı toplayan bir C program kodu yazınız.
Konsolda beklenen çıktı:
call by reference kullanarak iki sayi toplama: ------------------------------------------------------- ilk sayiyi giriniz : 52 ikinci sayiyi giriniz : 14 52 ve 14 sayilarinin toplami: 66
- Pointer kullanarak iki sayıdan en büyüğünü bulan bir C program kodu yazınız.
Konsolda beklenen çıktı:
iki sayidan en buyugunu bulunuz : ------------------------------------------------------------ ilk sayiyi giriniz : 47 ikinci sayiyi giriniz : 57 en buyuk sayi: 57
- Pointer kullanarak n elemanlı bir array'i dolduran ve elemanlarını yazdıran bir C program kodu yazınız.
Konsolda beklenen çıktı:
n elemanli bir array'i doldur ve elemanlarini yazdir : ------------------------------------------------------------ Doldurulacak sayi miktarini giriniz :5 5 adet sayi giriniz eleman - 0 : 47 eleman - 1 : 51 eleman - 2 : 96 eleman - 3 : 2 eleman - 4 : 10 Girilen elemanlar : eleman - 0 : 47 eleman - 1 : 51 eleman - 2 : 96 eleman - 3 : 2 eleman - 4 : 10
- Pointer kullanarak verilen bir string'in tüm permütasyonlarını yazdıran C program kodu yazınız.
Konsolda beklenen çıktı:
muro String'in permutasyonlarini yazdir : -------------------------------------------------------- Permutasyonlar : muro muor mruo mrou moru mour umro umor urmo urom uorm uomr rumo ruom rmuo rmou romu roum ourm oumr orum ormu omru omur
- Dinamik bellek ayırma (dynamic memory allocation) yöntemi ile en büyük elemanı bulan bir C program kodu yazınız.
Konsolda beklenen çıktı:
Dynamic Memory Allocation ile en guyuk sayiyi bul: ------------------------------------------------------------------------- Girilecek eleman miktarini belirleyiniz (1 - 100 arasi): 4 sayi 1: 7 sayi 2: 10 sayi 3: 2 sayi 4: 89 En buyu sayi : 89.00
- Pointer kullanarak verilen bir string'in uzunluğunu hesaplayan C program kodu yazınız.
Konsolda beklenen çıktı:
String'in uzunlugunu hesapla : --------------------------------------------------- String giriniz : Adana Girilen Adana stringinin uzunlugu : 5
- Call by reference kullanarak elemanları değiş tokuş (swap) eden bir C program kodu yazınız.
Konsolda beklenen çıktı:
Call by reference ile swap islemi : ------------------------------------------------------ İlk elemanı giriniz : 9 ikinci elemani girinizelement : 5 Ucuncu elemani giriniz : 4 Swap'dan onceki degerler: eleman 1 = 9 eleman 2 = 5 eleman 3 = 4 Swap'dan sonraki degerler: eleman 1 = 4 eleman 2 = 9 eleman 3 = 5
- Pointer kullanarak verilen bir sayının faktöriyelini hesaplayan C program kodu yazınız.
Konsolda beklenen çıktı:
Sayinin fakroriyelini bul : ------------------------------------------------------ Bir sayi giriniz : 5 5 sayisinin faktoriyeli : 120
- Verilen bir stringdeki ünlü ve ünsüz harfleri pointer kullanarak sayan C program kodu yazınız.
Konsolda beklenen çıktı:
Sesli ve sessiz harfleri say: ---------------------------------------------------------- Bir string giriniz: Turkey Sesli harfler : 2 Sessiz harfler : 4
- Pointer kullanarak bir diziyi (array) sıralayan C program kodu yazınız.
Konsolda beklenen çıktı:
Bir arrayi pointer kullanarak sirala: -------------------------------------------- Eleman sayisini giriniz : 4 4 tane sayi girinizarray : eleman - 1 : 14 eleman - 2 : 78 eleman - 3 : 87 eleman - 4 : 58 Siralama sonrasi elemanlar: eleman - 1 : 14 eleman - 2 : 58 eleman - 3 : 78 eleman - 4 : 87
- Bir fonksiyonun nasıl pointer döndüğünü gösteren C program kodu yazınız. Konsolda beklenen çıktı:
Pointer donen fonksiyon yaz : -------------------------------------------------- ilk sayiyi giriniz : 45 ikinci sayiyi giriniz : 96 Buyuk olan sayi: 96
- Bir dizideki tüm elemanların toplamını pointer kullanarak hesaplayan C program kodu yazınız.
Konsolda beklenen çıktı:
Bir arraydeki tum elemanlari topla : ------------------------------------------------ Eleman sayisini giriniz (maksimum 10 lutfen) : 4 4 adet sayi giriniz : eleman - 1 : 14 eleman - 2 : 65 eleman - 3 : 85 eleman - 4 : 123 Tum arrayin toplami : 287
- Bir dizinin elemanlarını pointer kullanarak ters sırada yazdıran C program kodu yazınız.
Konsolda beklenen çıktı:
Array'in elemanlarini ters sirada yazdir : ---------------------------------------------------------------- Eleman sayisini giriniz (maksimum 15 lutfen) : 3 3 adet sayi giriniz : eleman - 1 : 57 eleman - 2 : 41 eleman - 3 : 100 Arrayin tersten siralanmis elemanlari : eleman - 3 : 100 eleman - 2 : 41 eleman - 1 : 57
- Yapıya (struct) pointer kullanımını gösteren bir C program kodu yazınız.
Konsolda beklenen çıktı:
struct pointer kullanimi: -------------------------------------------------------- Ahmet Portakal adresi Karanfil Caddesi
- Birleşime (union) pointer kullanımını gösteren bir C program kodu yazınız.
Konsolda beklenen çıktı:
union pointer kullanimi : ---------------------------------------- Ahmet Agri Ahmet Agri
- Tüm alfabeyi pointer kullanarak yazdıran bir C program kodu yazınız.
Konsolda beklenen çıktı:
Alfabeyi yazdir: ---------------------------------------- Harfler : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Cevaplar
1.
#include <stdio.h> void main(void) { int a = 10, b, c; int *d = &a; printf("\n\nTemel pointer tanımlama :\n"); printf(" a, b, ve c birer int tamsayi ve a = 10"); // d bir pointer ve %p ile pointer adresini yazdiriyoruz printf("\n\n d ise bir tam sayi pointer'i ve a'nin adresini tutuyor: %p\n", d); printf("\n *d ile a'nin degerine ulasiyoruz a = %i\n", *d); printf("\n &a ile a'nin pointer adresine ulasiyoruz a = %p\n", &a); printf("\n &b ile b'nin pointer adresine ulasiyoruz : %p\n", &b); printf("\n &c ile c'nin pointer adresine ulasiyoruz : %p\n", &c); printf("\n &d ile d'nin pointer adresine ulasiyoruz : %p\n\n", &d); }
2.
#include <stdio.h> int main() { int* ab; int m; m = 17; printf("\n\n Pointer kullanimi:\n"); printf(" ab = int pointer'i, int m = 17\n\n"); printf(" m'nin adresi : %p\n",&m); printf(" m'nin degeri : %d\n\n",m); ab = &m; printf(" m'nin adresi ab'ye atandı.\n"); printf(" ab'nin adresi : %p\n",ab); printf(" ab'nin icerigi : %d\n\n",*ab); m = 35; printf(" m'ye 35 degeri atandi.\n"); printf(" ab'nin adresi : %p\n",ab); printf(" ab'nin icerigi : %d\n\n",*ab); *ab = 8; printf(" ab'nin isaret ettigi degiskenin degeri 8 olarak atandi.\n"); printf(" m'nin adresi: %p\n",&m);//ab m'nin adresini icerdigi icin //m 'nin degeri 8 olarak degisti printf(" m'nin degeri : %d\n\n",m); return 0; }
3.
#include <stdio.h> void main() { int m = 200; float fx = 200.60; char cht = 'z'; printf("\n\n & (Adresi) ve * (adresteki deger) operatorunun kullanimi :\n"); int *pt1; float *pt2; char *pt3; pt1 = &m; pt2 = &fx; pt3 = &cht; printf ( " m = %d\n",m); printf ( " fx = %f\n",fx); printf ( " cht = %c\n",cht); printf("\n & operator kullanimi :\n"); printf("-----------------------\n"); printf ( " m'nin adresi= %p\n",&m); printf ( " fx'in adresi = %p\n",&fx); printf ( " cht'nin adresi = %p\n",&cht); printf("\n & ve * operator kullanimi :\n"); printf("-----------------------------\n"); printf ( " m'nin adresindeki deger = %d\n",*(&m)); printf ( " fx'in adresindeki deger = %f\n",*(&fx)); printf ( " cht'nin adresindeki deger = %c\n",*(&cht)); printf("\n Sadece pointer kullanimi :\n"); printf("----------------------------------\n"); printf ( " m'nin adresi = %p\n",pt1); printf ( " fx'in adresi = %p\n",pt2); printf ( " cht'nin adresi = %p\n",pt3); printf("\n Sadece pointer operatorunun kullanimi :\n"); printf("----------------------------------\n"); printf ( " m'nin adresindeki deger = %d\n",*pt1); printf ( " fx'in adresindeki deger = %f\n",*pt2); printf ( " cht'nin adresindeki deger = %c\n\n",*pt3); }
4.
#include <stdio.h> int main() { int firstno, secondno, *ptr, *qtr, sum; printf("\n\n iki sayiyi toplama :\n"); printf("--------------------------------\n"); printf(" ilk sayiyi giriniz : "); scanf("%d", &firstno); printf(" ikinci sayiyi giriniz : "); scanf("%d", &secondno); ptr = &firstno; qtr = &secondno; sum = *ptr + *qtr; printf(" Girilen sayilarin toplami : %d\n\n",sum); return 0; }
5.
#include <stdio.h> long addTwoNumbers(long *, long *); int main() { long firstno, secondno, sum; printf("\n\n call by reference kullanarak iki sayi toplama:\n"); printf("-------------------------------------------------------\n"); printf(" ilk sayiyi giriniz : "); scanf("%ld", &firstno); printf(" ikinci sayiyi giriniz : "); scanf("%ld", &secondno); sum = addTwoNumbers(&firstno, &secondno); printf(" %ld ve %ld sayilarinin toplami: %ld\n\n", firstno, secondno, sum); return 0; } long addTwoNumbers(long *no1, long *no2) { long sum; sum = *no1 + *no2; return sum; }
6.
#include <stdio.h> #include <stdlib.h> void main() { int firstno,secondno,*ptr1=&firstno,*ptr2=&secondno; printf("\n\n iki sayidan en buyugunu bulunuz :\n"); printf("------------------------------------------------------------\n"); printf(" ilk sayiyi giriniz : "); scanf("%d", ptr1); printf(" ikinci sayiyi giriniz : "); scanf("%d", ptr2); if(*ptr1>*ptr2) { printf("\n\n en buyuk sayi: %d \n\n",*ptr1); } else { printf("\n\n en buyuk sayi: %d \n\n",*ptr2); } }
7.
#include <stdio.h> int main() { int arr1[25], i,n; printf("\n\n n elemanli bir array'i doldur ve elemanlarini yazdir :\n"); printf("------------------------------------------------------------\n"); printf(" Doldurulacak sayi miktarini giriniz :"); scanf("%d",&n); printf(" %d adet sayi giriniz \n",n); for(i=0;i<n;i++) { printf(" eleman - %d : ",i); scanf("%d",arr1+i); } printf(" Girilen elemanlar : \n"); for(i=0;i<n;i++) { printf(" eleman - %d : %d \n",i,*(arr1+i)); } return 0; }
8.
#include <stdio.h> #include <string.h> void changePosition(char *ch1, char *ch2) { char tmp; tmp = *ch1; *ch1 = *ch2; *ch2 = tmp; } void charPermutation(char *cht, int stno, int endno) { int i; if (stno == endno) printf("%s ", cht); else { for (i = stno; i <= endno; i++) { changePosition((cht+stno), (cht+i)); charPermutation(cht, stno+1, endno); changePosition((cht+stno), (cht+i)); } } } int main() { char str[] = "muro"; printf("\n\n muro String'in permutasyonlarini yazdir :\n"); printf("--------------------------------------------------------\n"); int n = strlen(str); printf(" Permutasyonlar : \n"); charPermutation(str, 0, n-1); printf("\n\n"); return 0; }
9.
#include <stdio.h> #include <stdlib.h> int main() { int i,n; float *element; printf("\n\n Dynamic Memory Allocation ile en guyuk sayiyi bul:\n"); printf("-------------------------------------------------------------------------\n"); printf(" Girilecek eleman miktarini belirleyiniz (1 - 100 arasi): "); scanf("%d",&n); //n eleman icin memory ayrildi element=(float*)calloc(n, sizeof(float)); if(element==NULL) { printf(" hata."); exit(0); } printf("\n"); for(i=0;i<n;++i) { printf(" sayi %d: ",i+1); scanf("%f",element+i); } for(i=1;i<n;++i) { if(*element<*(element+i)) *element=*(element+i); } printf(" En buyu sayi : %.2f \n\n",*element); return 0; }
10.
#include <stdio.h> int calculateLength(char*); void main() { char str1[25]; int l; printf("\n\n String'in uzunlugunu hesapla :\n"); printf("---------------------------------------------------\n"); printf(" String giriniz : "); fgets(str1, sizeof str1, stdin); l = calculateLength(str1); printf(" Girilen %s stringinin uzunlugu : %d ", str1, l-1); printf("\n\n"); } // ch = string'in baslangic adresi ( &str1[0] ) int calculateLength(char* ch) { int ctr = 0; while (*ch != '\0') { ctr++; ch++; } return ctr; }
11.
#include <stdio.h> void swapNumbers(int *x,int *y,int *z); int main() { int e1,e2,e3; printf("\n\n Call by reference ile swap islemi :\n"); printf("------------------------------------------------------\n"); printf(" İlk elemanı giriniz : "); scanf("%d",&e1); printf(" ikinci elemani girinizelement : "); scanf("%d",&e2); printf(" Ucuncu elemani giriniz : "); scanf("%d",&e3); printf("\n Swap'dan onceki degerler:\n"); printf(" eleman 1 = %d\n eleman 2 = %d\n eleman 3 = %d\n",e1,e2,e3); swapNumbers(&e1,&e2,&e3); printf("\n Swap'dan sonraki degerler:\n"); printf(" eleman 1 = %d\n eleman 2 = %d\n eleman 3 = %d\n\n",e1,e2,e3); return 0; } void swapNumbers(int *x,int *y,int *z) { int tmp; tmp=*y; *y=*x; *x=*z; *z=tmp; }
12.
#include <stdio.h> void findFactorial(int,int*); int main() { int fact; int num1; printf("\n\n Sayinin fakroriyelini bul :\n"); printf("------------------------------------------------------\n"); printf(" Bir sayi giriniz : "); scanf("%d",&num1); findFactorial(num1,&fact); printf(" %d sayisinin faktoriyeli : %d \n\n",num1,fact); return 0; } void findFactorial(int n,int *f) { int i; *f =1; for(i=1;i<=n;i++) *f=*f*i; }
13.
#include <stdio.h> int main() { char str1[50]; char *pt; int ctrV,ctrC; printf("\n\n Sesli ve sessiz harfleri say:\n"); printf("----------------------------------------------------------\n"); printf(" Bir string giriniz: "); fgets(str1, sizeof str1, stdin); //str1'in adresini pt'ye ata pt=str1; ctrV=ctrC=0; while(*pt!='\0') { if(*pt=='A' ||*pt=='E' ||*pt=='I' ||*pt=='O' ||*pt=='U' ||*pt=='a' ||*pt=='e' ||*pt=='i' ||*pt=='o' ||*pt=='u') ctrV++; else ctrC++; pt++; //bir sonraki karakteri kontrol etmek icin pointer bir arttiriliyor } printf(" Sesli harfler : %d\n Sessiz harfler : %d\n",ctrV,ctrC-1); return 0; }
14.
#include <stdio.h> void main() { int *a,i,j,tmp,n; printf("\n\n Bir arrayi pointer kullanarak sirala:\n"); printf("--------------------------------------------\n"); printf(" Eleman sayisini giriniz : "); scanf("%d",&n); printf(" %d tane sayi girinizarray : \n",n); for(i=0;i<n;i++) { printf(" eleman - %d : ",i+1); scanf("%d",a+i); } for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if( *(a+i) > *(a+j)) { tmp = *(a+i); *(a+i) = *(a+j); *(a+j) = tmp; } } } printf("\n Siralama sonrasi elemanlar: \n"); for(i=0;i<n;i++) { printf(" eleman - %d : %d \n",i+1,*(a+i)); } printf("\n"); }
15.
#include <stdio.h> int* findGreater(int*, int*); void main() { int numa=0; int numb=0; int *result; printf("\n\n Pointer donen fonksiyon yaz :\n"); printf("--------------------------------------------------\n"); printf(" ilk sayiyi giriniz : "); scanf("%d", &numa); printf(" ikinci sayiyi giriniz : "); scanf("%d", &numb); result=findGreater(&numa, &numb); printf(" Buyuk olan sayi: %d \n\n",*result); } int* findGreater(int *n1, int *n2) { if(*n1 > *n2) return n1; else return n2; }
16.
#include <stdio.h> void main() { int arr1[10]; int i,n, sum = 0; int *pt; printf("\n\n Bir arraydeki tum elemanlari topla :\n"); printf("------------------------------------------------\n"); printf(" Eleman sayisini giriniz (maksimum 10 lutfen) : "); scanf("%d",&n); printf(" %d adet sayi giriniz : \n",n); for(i=0;i<n;i++) { printf(" eleman - %d : ",i+1); scanf("%d",&arr1[i]); } pt = arr1; // pt arr1'in baslangicinin pointerı for (i = 0; i < n; i++) { sum = sum + *pt; pt++; } printf(" Tum arrayin toplami : %d\n\n", sum); }
17.
#include <stdio.h> void main() { int n, i, arr1[15]; int *pt; printf("\n\n Array'in elemanlarini ters sirada yazdir :\n"); printf("----------------------------------------------------------------\n"); printf(" Eleman sayisini giriniz (maksimum 15 lutfen) : "); scanf("%d",&n); pt = &arr1[0]; // pt arr1'in baslangic adresini gosteriyor printf(" %d adet sayi giriniz : \n",n); for(i=0;i<n;i++) { printf(" eleman - %d : ",i+1); scanf("%d",pt); pt++; } pt = &arr1[n - 1]; printf("\n Arrayin tersten siralanmis elemanlari :"); for (i = n; i > 0; i--) { printf("\n eleman - %d : %d ", i, *pt); pt--; } printf("\n\n"); }
18.
#include <stdio.h> struct EmployeeAddress { char *ename; char stname[20]; int pincode; } employee={"Ahmet Portakal","Karanfil Caddesi \n",654134},*pt=&employee; int main() { printf("\n\n struct pointer kullanimi:\n"); printf("--------------------------------------------------------\n"); printf(" %s adresi %s \n\n",pt->ename,(*pt).stname); return 0; }
19.
#include <stdio.h> union employeeAddress { char *ename; char stname[20]; int pincode; }; int main() { printf("\n\n union pointer kullanimi :\n"); printf("----------------------------------------\n"); union employeeAddress employee,*pt; employee.ename="Ahmet Agri\0"; pt=&employee; printf(" %s %s\n\n",pt->ename,(*pt).ename); return 0; }
20.
#include <stdio.h> int main() { char alph[27]; int x; char *ptr; printf("\n\n Alfabeyi yazdir:\n"); printf("----------------------------------------\n"); ptr = alph; for(x=0;x<26;x++) { *ptr=x+'A'; ptr++; } ptr = alph; printf(" Harfler : \n"); for(x=0;x<26;x++) { printf(" %c ", *ptr); ptr++; } printf("\n\n"); return(0); }
Daha fazlası için youtube kanalıma göz atabilirsiniz.
0 Yorumlar