2011-01-18 8 views
7

Duplicar posibles:
initialize array size from another array valuetamaño de la matriz y const

en C++

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

int main() 
{ 
    return 0; 
} 

El código está dando error en la línea 2; Sin embargo, si es algo, como a continuación se da ningún error después de la compilación:

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

int main() 
{ 
    return 0; 
} 

¿Por qué? sin embargo, si defino array b dentro de main, está bien en ambos casos ...

+0

Seleccione todo su código y haga clic en el botón de llaves en la parte superior de la ventana de código para formatearlo correctamente. También tenga en cuenta que hay una ** vista previa ** debajo del formulario de preguntas, por lo que puede ver si su pregunta es realmente legible antes de publicarla. –

+0

@Anon thnx lo haré la próxima vez en adelante .. –

+1

Esta misma pregunta fue formulada, casi idénticamente, recientemente. – GManNickG

Respuesta

5

Porque en C++ los tamaños de matriz deben ser expresiones constantes, no solo datos constantes. Los datos de matriz, aunque const, no son una expresión constante.

Segunda versión ES una expresión constante.

+0

Usted puede decirle al OP también cómo puede hacer una matriz dinámica (usando un tamaño variable) ... – Betamoo

+0

si defino el conjunto b dentro de main entonces no da ningún error. Explique por favor ... –

+0

@prp: Se es un error incluso si lo define "dentro de main". Si su compilador no informa un error, debe ser una extensión de lenguaje no estándar implementada por su compilador. Es decir. su compilador admite matrices locales con tamaño no constante. Sin embargo, C++ no permite esto ni siquiera para las matrices locales. – AnT

4

Parece que quiere hacer una matriz de tamaño variable. Para hacer esto, uno debe usar punteros.

PUNTEROS

Normalmente, sería declarar una matriz como esta:

char a[4]; 

Una matriz debe ser de un tamaño constante. No puede cambiar ¿Cómo podemos hacer que el tamaño sea variable? Me gusta esto.

char* a = new char[length]; 

¿Qué es esto? Normalmente, cuando declaras una matriz de un tamaño específico, se declara en la pila. Lo que este código hace, sin embargo, es asignar memoria en el montón.

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

se crea un puntero a una dirección donde se puede declarar y asignar valores a la matriz, todo ello en un espacio de memoria segura.