Şimdi Ara

Array hakkında bi soru (c)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
564
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar.

    Bi ödevim var fakat arrayle alakalı bir yerde takıldım.

    Fonksiyonla array in içeriğini oluşturup bu array i mainde (veya başka bir fonksiyonda) kullanarak başka işlem yapmam lazım.

    Arrayin içeriğini oluşturmakta sıkıntım yok, fakat bu içerikleri array i oluşturduğum fonksiyonun dışında veya mainde kullanamıyorum.

    Bunu nasıl yapabilirim?



    _____________________________
  • Array'ı oluşturduğun fonksiyonun geriye değer döndürmesi gerekiyor, dizi neyse o. Tamsayı dizisiyse int karakter dizisiyse char döndürecek.

    Atıyorum

    int f_array(){
    //icerigini olusturdun
    return diziAdi;
    }

    main'de çağırmak çok basit

    main(){
    int dizim[elemanSayisi] = f_array();
    }

    kolay gelsin



    < Bu mesaj bu kişi tarafından değiştirildi someonewhoaintbelongshere -- 22 Nisan 2014; 21:01:38 >
    _____________________________
  • array tanımını programın en üstünde define kısmında tanımlarsan her yerde kullanırsın.
    _____________________________
  • Array'in adresini yolla. Array'in type'ı ne?
    _____________________________
    Encinaar
  • Teşekkür ederim cevaplar için. En üstte tanımladığımda main'de arrayin elemanları yazdırmaya çalıştığımda değerler 0 olarak gözüküyor.

    @Ata, adres yollayarak yapmam daha iyi olacaktır ödev açısından fakat yapamamıştım. integer ve tek boyutlu bi array.
    _____________________________
  • quote:

    Orijinalden alıntı: srgn03

    Teşekkür ederim cevaplar için. En üstte tanımladığımda main'de arrayin elemanları yazdırmaya çalıştığımda değerler 0 olarak gözüküyor.

    @Ata, adres yollayarak yapmam daha iyi olacaktır ödev açısından fakat yapamamıştım. integer ve tek boyutlu bi array.

    Pointer nedir biliyor musun? Ona göre anlatayım.
    _____________________________
    Encinaar
  • quote:

    Orijinalden alıntı: Ata

    quote:

    Orijinalden alıntı: srgn03

    Teşekkür ederim cevaplar için. En üstte tanımladığımda main'de arrayin elemanları yazdırmaya çalıştığımda değerler 0 olarak gözüküyor.

    @Ata, adres yollayarak yapmam daha iyi olacaktır ödev açısından fakat yapamamıştım. integer ve tek boyutlu bi array.

    Pointer nedir biliyor musun? Ona göre anlatayım.

    Evet biliyorum.

    < Bu ileti tablet sürüm kullanılarak atıldı >
    _____________________________
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: srgn03


    quote:

    Orijinalden alıntı: Ata

    quote:

    Orijinalden alıntı: srgn03

    Teşekkür ederim cevaplar için. En üstte tanımladığımda main'de arrayin elemanları yazdırmaya çalıştığımda değerler 0 olarak gözüküyor.

    @Ata, adres yollayarak yapmam daha iyi olacaktır ödev açısından fakat yapamamıştım. integer ve tek boyutlu bi array.

    Pointer nedir biliyor musun? Ona göre anlatayım.

    Evet biliyorum.


    C'de pointerlar işleri oldukça kolaylaştırabilir.
    #include <stdio.h> 
    #include <stdlib.h>

    void addFive(int *, int);


    int main()
    {
    int array[3];
    array[0] = 0;
    array[1] = 1;
    array[2] = 2;

    //Şimdi array'deki elemanlara 5'ekleyeceğiz
    //Bunun için addFive fonksiyonunu çağırıyoruz
    addFive(array, 3);

    //Array'de neler değişmiş ???
    int i;
    for(i=0; i<3; i++)
    {
    printf("array[%d]=%d\n", i, array[i]);
    }

    //system("pause");
    return 0;
    }


    void addFive(int *array, int array_size)
    {
    int i;
    for(i=0; i<array_size; i++)
    {
    array[i] += 5;
    }
    }



    İki çeşit array vardır:
    1- Static array
    2- Dynamic array

    Static array'in size'ı bellidir ve değiştirilemez. Stack memory'de compile time'da oluşturulurlar. Yani programı derlediğinde belleğin stack için ayrılmış kısmında oluşturulurlar.
    Örnek:
    int integer[2];
    char character[9];

    Dynamic array'in size'ı değiştirilebilir. Heap memory'de runtime'da oluşturulur. Yani program çalışırken herhangi bir dynamic array oluşturulduğunda belleğin heap için ayrılmış kısmında oluşturulur. Kullanıldıktan sonra "free" edilmelidir. Aksi taktirde "memory leak" diye görünen hatalara neden olabilir.*
    Örnek:
    1-int *integer;
    --->>> Burada integer isimli, int tipinde bir dynamic array(pointer) tanımladık. Fakat bu değişken memory'de hiç bir yeri göstermiyor. Dolayısıyla "null" değerine sahiptir. Bu değişkene memory'de allocation yapmazsan(bellekte yer açmazsan) NULL POINTER EXCEPTION alırsın.

    2- integer = (int *)malloc(sizeof(int)*4);
    NOT: *integer: tutulan değer, integer=tutulan adres
    Şimdi adresimiz null dedik. Bu nedenle bir adres alma, bir de bu adresten itibaren kaç tane int tipi değer tutacağımızı 2. adımda yaptık.
    --->>> (int *) : type casting, yani tipin ne olduğunu belirtiyoruz
    --->>> malloc(ne kadar byte yer açılacak??): memory'de yer açar. Biz int*4 yani 16 bytelık yer açtık. Yani aşağıdaki gibi düşünürsek;

    integer: 1200 (1. elemanın başlangıç adresi)
    integer+4 : 1204 (2. elemanın başlangıç adresi)
    integer+8: 1208 (3. elemanın başlangıç adresi)
    integer+12: 1212 (4. elemanın başlangıç adresi)

    şeklinde 4 tane int için bellekte yer açmış olduk.

    Herhangi bir programla memory'deki adreslere her zaman ulaşabileceğimizi biliyoruz. Yani içinde N tane değer tutan bir array'in size'ını biliyorsak, ilk elemanın adresinden tüm elemanlarına ulaşabiliriz. Tek yapmamız gereken adresi taşımasını bilmek. Bunuda fonksiyona "<type> *" şeklinde vererek yapabiliriz. Yukarıda verdiğim kod örneğinde "int *" verdik.

    Son olarak farklı stillerde static ya da dynamic bir array'i kullanma yollarını göstereceğim:

    int arr[3];

    a) arr[1] = 1;
    b) *(arr +1) = 1;

    İlk durumda array'in 1 numaralı index'indeki elemanı 1 yaptık. Aslında orada yapılan base adresten 1 int(type int olduğu için) kadar adresi ilerletip değeri koymak.
    İkinci durumda'da bir üst satır anlattığım işlem açık olarak yapılmış. Parantez içindeki kısmın önceliği vardır. Base adres alınır, 1 eklenerek type neyse onun size'ı kadar adres ilerletilir. Parantez işlemi sonunda dışındaki *'da anlaşılacağı gibi söz konusu adrese denk gelen değer 1 olarak yerleştirilir.


    Biraz düzenden mahrum anlattım ama anlamadığım kısım varsa sorabilirsin ;)
    _____________________________
    Encinaar




  • Çok teşekkür ederim, birkaç güne deneyeceğim. Anlamadığım yer olursa sorarım. :)
    _____________________________
  • hocam mesela fonksiyon içinde deneme[] diye olsun bunu mesela global olarak bi işaretçin olsun bu işaretçi fonk içinde deneme'yi göstersin sonra o aldığı parametreleri yeni bir arraya aktattırman lazım çünkü fonk. Bittiğinde fonks içinde tanımlanan tüm alanlar temizlenir

    < Bu ileti mini sürüm kullanılarak atıldı >
    _____________________________
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.