char dizi_a[4] = {'T', 'E', 'S', 'T'}
// sizeof(char) = 1
// 4 * sizeof(char) = 4 * 1 = 4 bytechar dizi_a[4] = {'T', 'E', 'S', 'T'}
// dizi_a[2] = 205+2 * sizeof(char)
// = 205+2 * 1
// = 207char dizi_a[4] = {'T', 'E', 'S', 'T'}
printf("%c", dizi_a[2]); // => 'S'
printf("%d", &dizi_a[2]); // => 207// int dizi_b[3] = {100, 500, 1500};
// sizeof(int) = 4
// 3 * sizeof(int) = 3 * 4 = 12 byteint dizi_b[3] = {100, 500, 1500};
dizi_b[2] = 304 + 2 * sizeof(int)
// = 304 + 2 * 4
// = 312int dizi_b[3] = {100, 500, 1500};
printf("%c", dizi_b[2]); // => 1500
printf("%d", &dizi_b[2]); // => 312int dizi_b[3] = {100, 500, 1500};
dizi_b + 1 = 304 + 1 * sizeof(int)
// = 304 + 1 * 4
// = 308
printf("%d\n", dizi_b+1); // => 308int dizi_b[3] = {100, 500, 1500};
printf("%d\n", *(dizi_b+1)); // => 500int dizi_b[3] = {100, 500, 1500};
x: tamsayi
dizi[x] == *(dizi + x);
&dizi[x] == (dizi + x);int main() {
/*----------------------------------------------
* char tipinde diziler
*---------------------------------------------*/
printf("char tipinde diziler\n");
printf("====================\n");
char dizi_a[4] = {'T', 'E', 'S', 'T'};
printf("sizeof(char) : %d\n", sizeof(char));
printf("sizeof(dizi_a) : %d\n\n", sizeof(dizi_a));
printf("ilk elemanin adresi : %u\n", &dizi_a[0]);
printf("ikinci elemanin adresi : %u\n\n", &dizi_a[1]);
printf("%c\n", dizi_a[2]);
printf("%u\n\n", &dizi_a[2]);
return 0;
}int main() {
/*----------------------------------------------
* Int tipinde diziler
*---------------------------------------------*/
printf("int tipinde diziler\n");
printf("====================\n");
int dizi_b[3] = {100, 500, 1500};
printf("sizeof(int) : %d\n", sizeof(int));
printf("sizeof(dizi_b) : %d\n\n", sizeof(dizi_b));
printf("ilk elemanin adresi : %u\n", &dizi_b[0]);
printf("ikinci elemanin adresi : %u\n\n", &dizi_b[1]);
printf("%d\n", dizi_b[2]);
printf("%u\n\n", &dizi_b[2]);
return 0;
}int main() {
/*----------------------------------------------
* Dizinin pointer olarak kullanilmasi
*---------------------------------------------*/
printf("dizinin pointer olarak kullanilmasi\n");
printf("===================================\n");
printf("dizi_b[2] : %d\n", dizi_b[2]);
printf("*(dizi_b + 2) : %d\n\n", *(dizi_b + 2));
printf("&dizi_b[2] : %u\n", &dizi_b[2]);
printf("(dizi_b + 2) : %u\n", (dizi_b + 2));
return 0;
}// pointer boyutu ve long kullanilan islemciye ve isletim sistemine gore degisiklik gosterebilir
int main() {
short a;
int b;
long c;
char d;
int dizi[5];
int *ptr;
printf("sizeof(short) : %d\n", sizeof(short));
printf("sizeof(int) : %d\n", sizeof(int));
printf("sizeof(long) : %d\n", sizeof(long));
printf("sizeof(char) : %d\n", sizeof(char));
printf("\n");
printf("sizeof(a) : %d\n", sizeof(a));
printf("sizeof(b) : %d\n", sizeof(b));
printf("sizeof(c) : %d\n", sizeof(c));
printf("sizeof(d) : %d\n", sizeof(d));
printf("\n");
printf("sizeof(dizi) : %d\n", sizeof(dizi));
printf("sizeof(ptr) : %d\n", sizeof(ptr));
return 0;
}int main() {
int a;
int * a_ptr = &a;
// printf("baslangictaki adres degeri: %p\n", a_ptr); // 16'lik taban
printf("baslangictaki adres degeri: %u\n", a_ptr); // 10'luk taban
a_ptr++;
// printf("1 eklendigindeki adres degeri: %p\n", a_ptr);
printf("1 eklendikten sonra adres degeri: %u\n", a_ptr);
a_ptr -= 2;
// printf("2 eklendigindeki adres degeri: %p\n", a_ptr);
printf("2 cikarildiktan sonra adres degeri: %u\n", a_ptr);
a_ptr--;
// printf("2 eklendigindeki adres degeri: %p\n", a_ptr);
printf("1 cikarildiktan sonra adres degeri: %u\n", a_ptr);
printf("\n");
printf("a'nin 2 sonraki adresi: %u\n", (&a) +2);
printf("a'nin 1 onceki adresi: %u\n", (&a) -1);
return 0;
}int main() {
int i;
int a[5] = {10, 20, 30, 40, 50};
int *aptr;
aptr = a;
// aptr = &a[0]
// dizinin 2. elemanini yazdiriyoruz
printf("a[2] : %d\n", a[2]);
// pointer'in 2 sonraki adresinin degerini yazdiriyoruz
printf("*(aptr+2) : %d\n", *(aptr+2));
printf("\n");
// pointer dizi yazim sekliyle kullanilabilir
printf("aptr[2] : %d\n", aptr[2]);
// dizi pointer yazim sekliyle kullanilabilir
printf("*(a+2) : %d\n", *(a+2));
printf("\n");
// dizinin 2. indexteki elemaninin adresi
printf("&a[2] : %d\n", &a[2]);
printf("a+2 : %d\n", a+2);
return 0;
}void ekrana_yaz(int d[], int N) {
int i;
for (i = 0 ; i < N ; i++)
printf("%d\n", d[i]);
printf("\n");
}
// yukaridaki fonksiyon ile tamamen ayni sekilde calisir
void ekrana_yaz_2(int *d, int N) {
int i;
for (i = 0 ; i < N ; i++)
printf("%d\n", d[i]);
printf("\n");
}
int main() {
int dizi[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
// ilk 2 elemani yazmak istersek
ekrana_yaz(dizi, 2);
// ekrana_yaz_2 fonksiyonunda da ayni sekilde kullanilabilir
// ekrana_yaz_2(dizi, 2);
// 2'ciden itibaren 3 tane eleman yazmak istersek
ekrana_yaz(&dizi[2], 3);
// usttekinin diger yazim sekli
ekrana_yaz(dizi+2, 3);
return 0;
}#include <stdio.h>
// onceki ornekteki fonksiyonun baslangic ve bitis adresini kullanan ornek
void ekrana_yaz_3(int *baslangic, int *son) {
int * p;
for (p = baslangic ; p <= son ; p++)
printf("%d\n", *p);
printf("\n");
}
int main() {
int dizi[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
// dizinin 0. elemanindan baslayip 9. elemana kadar (9 dahil) yaz
ekrana_yaz_3(dizi, &dizi[9]);
// dizinin 0. elemanindan baslayip 3. elemana kadar (3 dahil) yaz
ekrana_yaz_3(dizi, &dizi[3]);
// yukaridakinin diger yazim sekli
ekrana_yaz_3(dizi, dizi+3);
return 0;
}








