2010-07-22 16 views

cevap

22

içinde

örneğin; Derleyicinin belirlemesi için yalnızca bir boyut bırakılabilir ve ilk boyut olmalıdır.

Sen yazabilirsiniz:

int d1[] = { ... }; 
int d2[][2] = { ... }; 
int d3[][2][3] = { ... }; 

Vb

+1

Kaç şanssızlık numarası 13 için üzgünüz, ama bu muazzam yardımcı oldu :) –

1

En azından dışındaki tüm boyutlara bunu söylemelisiniz. Durumda bir N-boyutlu bir dizilim içinde (N> 0) kullanarak, N-1 boyutların büyüklüklerini tanımlamak gerekir ile

int array[][3] = { 
    {1,2,3}, 
    {4,5,6}}; 
+0

Doğru, en dışta değil, en dışta belirtmelisin, değil mi? – falstro

+0

Doğru n-1 en küçük boyuta ihtiyacınız var. –

3

En yüksek hariç tüm boyutlarını belirtmek gerekir. Bunun nedeni, derleyicinin kendi küçük dizilerine işaret eden bir dizi işaretçiden farklı olarak büyük bir bellek bloğu tahsis etmesidir. Başka bir deyişle,

int array[][3][4] = ...; 

(burada beyan Ancak birçok 3x4 diziler) boyutunda 3 * 4 * ait bir bitişik bellek bölgesini ayıracak. Böylece daha sonra kodunuzda, hafızada 69 yazmak için nerede bulmak için

array[1][2][3] = 69; 

yazarken, bu diziye almak için daha sonra 12 * sizeof (int) ileri atlar, adres (dizi) başlar [ 1], artı 2 * 4 * sizeof (int) dizisine [1] [2], artı 3 * sizeof (int) dizisine son olarak [1] [2] [3] dizisinin başlangıcına ulaşır.

int ***array = new int**[n]; 
for(i=0; i<n; i++) 
{ 
    array[i] = new int * [3]; 
    for(j=0; j<4; j++) 
    array[i][j] = new int[4]; 
} 

(benim dizimi kesin değilse ben C böyle bir şey kodlamak için yaşadım süre beri üzgün ... been), örneğin, yazı ile karşılaştırın. Bu örnekte, dizi n * sizeof (int **) bayt uzunluğunda bir kod bloğuna işaret eder. Bu dizinin her elemanı, 3 * sizeof (int *) bayt uzunluğundaki başka bir diziyi işaret eder. Bu dizilerin her bir öğesi, 4 * boyutunun (int) bayt uzunluğundaki başka bir diziyi işaret eder. Bu durumda, [1] [2] [3] dizisini hesaplamak yerine, adres (dizi + bir şey) yerine, yazılmadan önce, bellekte birkaç farklı işaretçiyi takip etmelidir. Yazmadan önce, 69.

İlgili konular