2011-01-18 19 views
7

Powiel możliwe:
initialize array size from another array valuerozmiar tablicy i const

w C++

const int a[]={1,2,3,4,5}; 
int b[a[2]]; 

int main() 
{ 
    return 0; 
} 

Kod daje błąd w wierszu 2; Jeśli jednak jest coś takiego jak poniżej to nie daje o błędzie po kompilacji:

const int a=3; 
int b[a]; 

int main() 
{ 
    return 0; 
} 

dlaczego tak jest? jeśli jednak zdefiniuję tablicę b wewnątrz głównej, to w obu przypadkach jest w porządku ...

+0

Wybierz cały kod i kliknij przycisk nawiasy klamrowe u góry okna kodu, aby poprawnie go sformatować. Pamiętaj też, że pod formularzem pytania znajduje się ** preview **, dzięki czemu możesz sprawdzić, czy Twoje pytanie jest rzeczywiście czytelne przed jego opublikowaniem. –

+0

@Anon Thnx zrobię to następnym razem .. –

+1

To samo pytanie zostało ostatnio zadane prawie identycznie. – GManNickG

Odpowiedz

5

Ponieważ w tablicach C++ rozmiary muszą być wyrażenia stałe, a nie tylko stałe dane. Dane tablicowe, mimo że const, nie są wyrażeniem stałym.

Druga wersja to wyrażenie ciągłe.

+0

Możesz powiedzieć OP, jak on może zrobić tablicę dynamiczną (używając zmiennej wielkości) ... – Betamoo

+0

jeśli zdefiniuję tablicę b wewnątrz głównej, to nie da żadnego błędu. Proszę wyjaśnić ... –

+0

@prp: It jest błędem, nawet jeśli zdefiniujesz go "wewnątrz głównego". Jeśli twój kompilator nie zgłasza błędu, musi to być niestandardowe rozszerzenie językowe zaimplementowane przez twój kompilator. To znaczy. Twój kompilator obsługuje lokalne tablice o nielimitowanym rozmiarze. Niemniej jednak C++ nie dopuszcza tego nawet dla lokalnych tablic. – AnT

4

Wygląda na to, że chcesz utworzyć tablicę o zmiennych rozmiarach. Aby to zrobić, należy użyć wskaźników.

wskaźniki

Normalnie byłoby zadeklarować tablicę tak:

char a[4]; 

Tablica musi być stałym rozmiarze. Nie może się zmienić. Jak możemy zmienić rozmiar? Lubię to.

char* a = new char[length]; 

Co to oznacza? Zwykle po zadeklarowaniu tablicy o określonym rozmiarze deklarowana jest na stosie. Tym, co robi ten kod, jest jednak przydzielenie pamięci na stercie.

char a[4]; // This is created at compile time 
char* a = new char[length]; // This is created at run time 

Tworzysz wskaźnik do adresu, w którym możesz zadeklarować i przypisać wartości do swojej tablicy, a wszystko to w bezpiecznym miejscu w pamięci.