1. sayfa
|
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 |
| 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? |
|
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> İ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 ;) |
| Ç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 |
1. sayfa
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?
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.