2010-06-24 9 views
8

Qual è il significato dell'utilizzo del secondo parametro con una virgola nel codice seguente?Qual è il significato di new int [25,2]?

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

Compilare anche questo? –

+3

Sì, è un codice perfettamente legale (sfortunatamente) –

+0

Ma si noti che 'new (int [25, 2])' non è un codice legale. –

risposta

18

Questo è il comma operator in azione: si valuta che sia operando e restituisce l'ultimo, nel tuo caso 2. In modo che sia equivalente:

int *num = new int[2]; 

Probabilmente è giusto dire che il 25,2 parte non era ciò che era inteso, a meno che non fosse una domanda trabocchetto.

Modifica: grazie Didier Trosset.

+0

Fa l'operatore virgola restituisce il primo operando o l'ultimo? – AraK

+4

Restituisce l'ultimo –

+1

Questo sembra molto simile alla risposta di Didiers. Hai usato la stessa fonte, oppure i programmatori pensano allo stesso modo :) – Default

15

Questo è l'operatore virgola in azione: si valuta che sia operando e restituisce l'ultima uno, nel tuo caso 2. In modo che sia equivalente:

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

Si prega di notare che il testo dei post su SO è pubblicato con una licenza che richiede l'attribuzione. Puoi copiare e incollare, ma dovresti citare le fonti. – avakar

+0

Eugen Dinca ha pubblicato esattamente la stessa risposta 2 minuti prima di te. Non sono sicuro di ripubblicare la sua risposta solo per correggere una parola è più efficiente (e più elegante) che solo puntare l'errore in modo che possa correggere la sua risposta. – ereOn

+0

Non pensavo di poter modificare le risposte degli altri. In realtà, per prima cosa ho indicato l'errore in un commento, puoi vederlo, e un paio di minuti dopo aver copiato, ha incollato la sua risposta per correggerla. Con le mie scuse per il comportamento non corretto. –

11

Si utilizza l'operatore virgola, che è fare in modo che il codice faccia qualcosa che potresti non aspettarti a prima vista.

L'operatore virgola valuta l'operando LHS quindi valuta e restituisce l'operando RHS. Quindi, nel caso di 25, 2 valuterà 25 (non fare nulla) quindi valutare e restituire 2, in modo che riga di codice è equivalente a:

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

// Dichiarare una matrice unidimensionale
int [] array1 = new 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 };