Skip to content

Instantly share code, notes, and snippets.

@Mervetafrali
Last active March 18, 2017 09:15
Show Gist options
  • Select an option

  • Save Mervetafrali/8d060c1c7e15bc91a265f45a89593ba0 to your computer and use it in GitHub Desktop.

Select an option

Save Mervetafrali/8d060c1c7e15bc91a265f45a89593ba0 to your computer and use it in GitHub Desktop.

Programlama 2 → 4. Hafta

Pointer & Dizi

1

Diziler

2
char dizi_a[4] = {'T', 'E', 'S', 'T'}

// sizeof(char) = 1

// 4 * sizeof(char) = 4 * 1 = 4 byte
3
char dizi_a[4] = {'T', 'E', 'S', 'T'}

// dizi_a[2] 	= 205+2 * sizeof(char)
 //			      = 205+2 * 1
		//       	= 207
4
char dizi_a[4] = {'T', 'E', 'S', 'T'}

printf("%c", dizi_a[2]); 		// =>		 'S'
printf("%d", &dizi_a[2]); 		// =>		207
5
// int dizi_b[3] = {100, 500, 1500};

// sizeof(int) = 4

// 3 * sizeof(int) = 3 * 4 = 12 byte
6
int dizi_b[3] = {100, 500, 1500};
dizi_b[2] 	= 304 + 2 * sizeof(int)
	//		    = 304 + 2 * 4
	//		    = 312
7
int dizi_b[3] = {100, 500, 1500};
printf("%c", dizi_b[2]); 		// =>		1500
printf("%d", &dizi_b[2]); 	//	=>		  312

Diziler & İşaretçiler

8
int dizi_b[3] = {100, 500, 1500};

dizi_b + 1		= 304 + 1 * sizeof(int)
		//		    = 304 + 1 * 4
			//     	= 308
printf("%d\n", dizi_b+1);  //	=>		308
9
int dizi_b[3] = {100, 500, 1500};

printf("%d\n", *(dizi_b+1));	//	=>	   500
10
int 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;

}

Sizeof

// 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;
}

İşaretçi Aritmetiği

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;
}

İşaretçiler Ve Diziler

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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment