Tam Sürümünü Görmek İçin : C++ memory allocation (char **)
void PrintFrame(int h, int w)
{
char **frame;
int r,c,i;
frame = new char[h][w];
...
bana w harfini orada kullanamayacağımı söylüyor. sebebi nedir acaba?
acehreli
23/01/2008, 00:33
char a[h][w] dedigimiz zaman, h tane char[w] anlamina gelir. (Dogru yazdim, w tane char[h] degil!)
C++'ta degisken uzunluklu diziler olmadigi icin, o ifadenin char[w] kismindaki w'nun sabit olmasi gerekiyor.
Eger bunu kabul edersek, h tane char[w]'yu gostermek icin de char(*)[w] tUrune ihtiyac vardir. Yani orada frame'in tUrUnu de oyle yazarsak, bu calisir:
char (*frame)[3];
frame = new char[h][3];
O kodu daha okunur yapmak icin typedef cok ise yarar:
typedef char UcluDizi[3];
UcluDizi * frame;
frame = new UcluDizi[h];
Tabii orada 3'un sabit olarak yazilmasini istemedigin icin, aslinda soyle bir sey istiyorsun:
void PrintFrame(int h, int w)
{
char ** frame = new char* [h];
for (int i = 0; i != w; ++i) {
frame[i] = new char[w];
}
}
C++'ta bu islere cok daha uygun topluluk yapilari da var (ornegin vector). Onlardan uygun olanlarini kullanmak en dogrusu...
Ali
char **x= new char* a[5];
bu güzelmiş bayağı ya. şimdi buna şöyle yaklaşabilir miyiz. bizim bir a dizimiz var. bu dizimizde de karakter pointerları mevcut. x pointerımız da bunların pointerı.
misal şöyle bir kodda
int *x=new int[5];
5 integerlık bir yer açıyor ve x pointerı da açılan yerdeki ilk elemanı gösteriyor başta. peki burdaki yer açılıp ilk elemanın adresini döndürme olayı yukarda nasıl oluyor.
yani burda new kavramını tam olarak anlayamadım. new char *a[5] dediğimizde de 5 character pointerı büyüklüğünde yer açılıp x pointerı orda açılan arraydeki ilk elemanın adresine mi sahip oluyor?
acehreli
23/01/2008, 02:45
Bunlari denemeden yaziyorsun degil mi... ;) Derlenebilmesi icin orada 'a' olmayacak:
char **x= new char* [5];
Bes tane char* icin yer ayriliyor ve birincisinin adresi dOnduruluyor. Ayrica, o bes tane char*'in degeri 0, yani hicbir nesneyi gostermiyorlar.
Ali
tam düşündüğüm gibi sağolun hocam :)
evet ya orada a yı fazladan yazmışım. derlemek mi? o da ne? notepad coder :P
ilginiz için çok teşekkürler. buna benzer bir şeyi C'de matrix hesaplamalarında yapmıştım. İnsan çabuk unutuyor :)
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.