Artariel Mesaj tarihi: Aralık 3, 2010 Paylaş Mesaj tarihi: Aralık 3, 2010 tam anladım demiştim şu olayı ki bir farklı şey daha çıktı.. şimdi char array[5]={'a','b','c','d','e'}; *(array+1) bize b'yi gösterecek işte dizilerle ilgili bu tür şeyleri anlamışken şöyle bir şey çıktı karşıma hayatım söndü: char *x[]; bu ne anlama gelir tam olarak nasıldır kullanımı ? özellikle fonksiyonlarda görüyorum abc(char *x[]) veya abc(char *x) türünde şeyler.. nedir bunlar Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Deacon Mesaj tarihi: Aralık 3, 2010 Paylaş Mesaj tarihi: Aralık 3, 2010 Her ne kadar aslinda pointer ve arrayler ayni seyler olmasa da, char *x[]; ile char **x ayni sey diyebilirim. -aslinda bana x adinda, bir karakter arrayina point edebilecek bir pointer ver demis oluyorsun- char *x'in ne anlama geldigini sordugun icin tam olarak pointer'in ne oldugunu bilmedigini tahmin ediyorum. Bu yuzden de http://www.eskimo.com/~scs/cclass/notes/sx10.html burayi okumani oneriyorum. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Kojiroh Mesaj tarihi: Aralık 3, 2010 Paylaş Mesaj tarihi: Aralık 3, 2010 char* x veya char *x, x'in bellekteki adresi. Ve aslında dediğin gibi, char a[5] = { bi şeyler }; dediğin zaman a da char tipindeki 5 elemandan oluşan dizinin ilk elemanının adresini gösteren bi pointer oluyo. Bu elemanlar bellekte sıralı halde bulunduğundan, dizinin 2. elemanına (indeksi 1) erişmek istediğinde bellekte a+1 konumuna bakıyosun. Elinde bi pointer varsa, * operatörünü kullanarak o pointer'ın işaret ettiği yerdeki değeri öğrenebilirsin. int *x = (int*)calloc(1, sizeof(int)); *x = 5; Henüz pointer kavramına aşina değilsen ilk satırın üstünde fazla durmana gerek yok, yaptığı şey bellekten 1 int boyutunda bi yer almak ve adresini döndürmek. 2. satırda da o adresteki değere 5 sayısını atıyosun. *(a+1) demesi de bundan. Parantezin içindeki kısım aslında bi bellek adresi. Onun içinde bulunan değeri almak için de * operatörü kullanılıyo işte. Örneği bi dosyadan int veriler okuyosun ve her türlü değer yazılmış olabilir. Hatalı okuma ihtimaline karşılık ne yapacaksın? 0 döndürsen olmaz, 0 yazılmış olabilir. -1 de aynı şekilde. Bunun üstesinden gelebilmek için genelde şöyle fonksiyonlar tanımlanır: bool degeroku(int *x) { if(okuyabildim) { *x = bilmemne; return true; } else return false; } Fonksiyonu bu şekilde tanımladıktan sonra, gereken yerde bellekten 1 int boyutunda yer alır, adresini bu fonksiyona verirsin. int x = 5; şeklinde tanımladığın değişkenlerin adreslerini de gönderebilirsin. Bunun için de & operatörü kullanılır. Yani aşağıdaki iki kullanım da aynı işi yapıyo. int *x = (int*)calloc(1, sizeof(int)); if(degeroku(x)) printf("%d", *x); else printf("hata var"); int x; if(degeroku(&x)) printf("%d", x); else printf("hata var"); Dikkat etmen gereken nokta, x'in ilk kullanımda int bi değerin adresini gösteren bi pointer, ikinci kullanımda o değerin kendisi olduğu. Örneğin sprintf yukardaki gibi çalışır ve char dizileri üzerinden işlem yapar. Bunun için de yarattığın dizinin ilk elemanın adresini ister senden. Aşağıdaki gibi mesela: char buffer[256]; sprintf(buffer, "merhaba sdfdsafjka"); Dönüş değerine bakarak başarılı mı değil mi öğrenebilirsin. char *x[]; dediği şey de aslında bi char dizisinin ilk elemanın adresini gösteren pointerı gösteren pointerın adresi. Pointer pointerı yani. Konu pointer olunca ancak bu kadar özet geçilebiliyo :( Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Kojiroh Mesaj tarihi: Aralık 3, 2010 Paylaş Mesaj tarihi: Aralık 3, 2010 char *x[] kısmı biraz boktan olmuş, acele çıkmam gerekiyodu idare edin sdfas Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Anason Mesaj tarihi: Aralık 3, 2010 Paylaş Mesaj tarihi: Aralık 3, 2010 boyle karistirdigin zamanlarda, ben operator siralamasini gozden gecirmeni tavsiye ederim ve cdecl programini kullanmani, Type `help' or `?' for help cdecl> explain char *x[]; declare x as array of pointer to char cdecl> explain char (*x)[]; declare x as pointer to array of char cdecl> Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar