folder Tahribat.com Forumları
linefolder C - C++
linefolder Pointer Le İlgili Bir Mantık Sorusu Acil



Pointer Le İlgili Bir Mantık Sorusu Acil

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek
    char *takim[3]={"armut","ayva","elme"};

    Burada anladığım: *takim[1] bellekte armut un bulunduğu yeri yani ilk teriminin adresini gösteriyor. Peki ben ben bu armutun 2. indisine nasıl ulaşacağım ?

    *(armut[1]+1)  mi yazmam lazım yazınca olmuyor derleyici hata veriyor. 

     

    2. sorum bununla paralel.

     char *aptr="armut"; // tanımlı olsun.

     *(aptr+1)=3;//öğrendiğime göre aptr ilk terimi gösteriyor +1 2. yi yani r yi göstermeli.

    Bana göre r yerine 3 yazmalı ama olmuyor atamıyor. Hani diziler pointeri temsil ediyordu ? Diziyle yapınca dizi[2]=3 olsa ve atama yapsam atasam 3 atanıyor ama bu şekilde pointerle atayınca olmuyor. Mantığıma yatmadı bu iş. Neden olmuyor anlamıyorum....

    Nerede yanlış düşünüyorum ve gerçek mantığı nedir bunun anlatırsanız sevinirim.

     

    Not: Acil çünkü acilen anlayıp geçmek istiyorum.


    https://www.youtube.com/watch?v=WC3-71NKwPw
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    splintercell
    splintercell's avatar
    Kayıt Tarihi: 28/Eylül/2008
    Erkek

    1. soru

    printf("%s", takim[0]);          çıktı: armut
    printf("%s", takim[0]+2);      çıktı: mut
    printf("%c", *(takim[0]+2));  çıktı: m

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    splintercell
    splintercell's avatar
    Kayıt Tarihi: 28/Eylül/2008
    Erkek

    2.yi ben de anlayamadım tam olarak sorun nerde

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek

     takim[0]+2);      çıktı: mut

    neden amr değil son 3 ?? mantığı ne bunun...

     

    2. soru:

     

    char *aptr="armut"; //olsun.

     

    burada r harfi yerine w harfi nasıl yazılır diye sordum bence

     

    *(aptr+1)='w' olarak atanmalı ama atanmıyor ??

    zeybekustasi tarafından 01/Nis/13 21:24 tarihinde düzenlenmiştir

    https://www.youtube.com/watch?v=WC3-71NKwPw
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    splintercell
    splintercell's avatar
    Kayıt Tarihi: 28/Eylül/2008
    Erkek
    zeybekustasi bunu yazdı

     takim[0]+2);      çıktı: mut

    neden amr değil son 3 ?? mantığı ne bunun...

     

    2. soru:

     

    char *aptr="armut"; //olsun.

     

    burada r harfi yerine w harfi nasıl yazılır diye sordum bence

     

    *(aptr+1)='w' olarak atanmalı ama atanmıyor ??

    2.soruda ne sordugunu anladım da sorun nerden kaynaklanıyo onu anlamadım, tamam

    1. soruya gelince (takim[0]+2) armut kelimesindeki 'm'nin adresini gösteriyo printf("%s"); komutu da o adresten itibaren okuyarak ekrana yazdırıyo

    neden (takim[0]+2) 'm' i gösteriyo dersen
    char *takim[3]={"armut","ayva","elme"};

    bu tanımda *takim[3] bellekte bitişik olarak şu şekilde diziliyor: armutayvaelme

    takim[0] (a)rmut burdaki a'nın adresini

    takim[1] (a)yva burdaki a'nın adresini

    takim[2] (e)lme burdaki e'nin adresini gösterir

    o yüzden takim[0]+2 yazarsan işaretçi doğal olarak iki sağa kayar ve ar(m)ut burdaki m'i gösterir sonra da onu printf("%s",takim[0]+2); olarak kullanırsan doğal olarak m harfinden başlar ve takim[0]'ın yani bulunduğu bölmenin sonuna kadar gider.

    hatta istersen

    printf("%s",takim[0]+6);
    printf("%s",takim[1]);

     

    yazarsan ikisinin de çıktısı ayva olur çünkü takim[0]+6=takim[1] harfleri yan yana sayarsan

    o kadar da anlaşılmayacak bişey yok gibi

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ataturkcu1
    ataturkcu1's avatar
    Kayıt Tarihi: 20/Nisan/2007
    Erkek
    zeybekustasi bunu yazdı
    char *takim[3]={"armut","ayva","elme"};

    Burada anladığım: *takim[1] bellekte armut un bulunduğu yeri yani ilk teriminin adresini gösteriyor. Peki ben ben bu armutun 2. indisine nasıl ulaşacağım ?

    *(armut[1]+1)  mi yazmam lazım yazınca olmuyor derleyici hata veriyor. 

     

    2. sorum bununla paralel.

     char *aptr="armut"; // tanımlı olsun.

     *(aptr+1)=3;//öğrendiğime göre aptr ilk terimi gösteriyor +1 2. yi yani r yi göstermeli.

    Bana göre r yerine 3 yazmalı ama olmuyor atamıyor. Hani diziler pointeri temsil ediyordu ? Diziyle yapınca dizi[2]=3 olsa ve atama yapsam atasam 3 atanıyor ama bu şekilde pointerle atayınca olmuyor. Mantığıma yatmadı bu iş. Neden olmuyor anlamıyorum....

    Nerede yanlış düşünüyorum ve gerçek mantığı nedir bunun anlatırsanız sevinirim.

     

    Not: Acil çünkü acilen anlayıp geçmek istiyorum.

    1.Arraylerde 0dan baslanir sayilmaya.Dolayisiyla takim[1] dersen ayvaya erisirsin.

    2.armut[1] yazmissin,armut bir array olarak tanimlanmamis.Hata vermesi normal.Armutun ikinci indisine,yani 'm' harfine ulasmak istiyorsan takim[0][2] yazmalisin.

    3.Bilmiyorum.


    Pragmatism&Realism
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Şöyle ulaşılabilir:

    #include <stdio.h>
    #include <string.h>
    
    #define BOYUT 3
    
    char * takim[BOYUT] = {"armut", "ayva", "elma"};
    
    int main()
    {
       size_t tmpuzunluk = 0;
    
       for (int i = 0; i < BOYUT; ++i)
       {
          tmpuzunluk = strlen(takim[i]);
    
          for (int j = 0; j < tmpuzunluk; ++j)
          {
             printf("%c\n", takim[i][j]);
          }
          puts("------------------------");
       }
    
    
       return 0;
    }

    //Farklı bir yol
    #include <stdio.h>
    #include <string.h>
    
    #define BOYUT 4
    
    char *takim[BOYUT] = {"armut", "ayva", "elma", "dana"};
    
    int main()
    {
       size_t tmpuzunluk = 0;
       int i = 0;
       char * c = NULL;
    
       c = &takim[0][0];
       tmpuzunluk = strlen(takim[0]);
       
       for ( i = 0; i < BOYUT * tmpuzunluk; ++i)
       {
          if (c[i] == '\0') {printf("<=><=><=>\n"); continue;}
          printf("%c\n", *(c + i));
       }
       puts("------------------------");
    
       system("pause");
       return 0;
    }
    
    YeniHarman tarafından 02/Nis/13 01:49 tarihinde düzenlenmiştir

    Olaylara karışmayın!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ZoRKaYa
    ZoRKaYa's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    İki boyutlu arraylere yani matrislere giriyo ondan dolayı. Sebebi c dilinde string diye birşey yoktur. C aşıkları istediği kadar bi taraflarını yırtsın var işte string "sdfa" bu diye ama değil arkadaşım. Bu bir array ve içerisinde 1 byte lık sayılar tutar ekrana bastırma sırasında bu 1 byte lık sayılar ascii karşılıklarına çevirilir ve basılır.


    echo "imzanız özel karakter içermemelidir";
Toplam Hit: 2003 Toplam Mesaj: 8