2010-06-24 18 views
8

¿Cuál es el significado de usar el segundo parámetro con una coma en el código siguiente?¿Cuál es el significado de new int [25,2]?

int *num = new int[25,2]; 
+5

¿Eso incluso compila? –

+3

Sí, es un código perfectamente legal (lamentablemente) –

+0

Pero tenga en cuenta que 'new (int [25, 2])' no es un código legal. –

Respuesta

18

Esa es la comma operator en acción: se evalúa es el operando y devuelve el último, en su caso 2. Así que es equivalente a:

int *num = new int[2]; 

Es probablemente seguro decir que el 25,2 parte no era lo que se pretendía, a menos que sea una pregunta capciosa.

Editar: gracias Didier Trosset.

+0

El operador de coma devolver el primer operando o el último? – AraK

+4

Devuelve el último. –

+1

Esto se parece mucho a la respuesta de Didiers ... ¿Usó la misma fuente, o los programadores solo piensan igual :) – Default

15

Ese es el operador coma en acción: se evalúa es el operando y devuelve el última uno, en su caso 2. De modo que es equivalente a:

int *num = new int[2]; 
+2

Tenga en cuenta que el texto de las publicaciones en SO se publica con una licencia que requiere atribución. Puede copiar y pegar, pero debe citar las fuentes. – avakar

+0

Eugen Dinca publicó exactamente la misma respuesta 2 minutos antes que usted. No estoy seguro si volver a publicar su respuesta solo para corregir una palabra es más eficiente (y más elegante) que simplemente señalar el error para que pueda arreglar su respuesta. – ereOn

+0

No pensé que podría editar las respuestas de otros. De hecho, primero señalé el error en un comentario, puedes verlo, y un par de minutos después de copiar-pegar su respuesta para corregirlo. Con mis disculpas por el comportamiento no correcto. –

11

Está utilizando el operador coma, que es haciendo que el código haga algo que quizás no esperes a primera vista.

El operador de coma evalúa el operando LHS, luego evalúa y devuelve el operando RHS. Así, en el caso de 25, 2 se evaluará 25 (no hacer nada) y luego evaluar y volver 2, por lo que esa línea de código es equivalente a:

int *num = new int[2]; 
-1

// declarar una matriz unidimensional
int [] array1 = nuevo int [5];

// Declare and set array element values 
    int[] array2 = new int[] { 1, 3, 5, 7, 9 }; 

    // Alternative syntax 
    int[] array3 = { 1, 2, 3, 4, 5, 6 }; 

    // Declare a two dimensional array 
    int[,] multiDimensionalArray1 = new int[2, 3]; 

    // Declare and set array element values 
    int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }; 

    // Declare a array 
    int[][] Array = new int[6][]; 

    // Set the values of the first array in the array structure 
    Array[0] = new int[4] { 1, 2, 3, 4 }; 
Cuestiones relacionadas