2010-06-24 109 views
8

在下面的代码中用逗号代表第二个参数是什么意思?new int [25,2]是什么意思?

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

这是否甚至编译? – 2010-06-24 06:36:25

+3

是的,这是完全合法的代码(不幸) – 2010-06-24 06:44:07

+0

但注意'new(int [25,2])'不是合法代码。 – 2010-06-24 09:57:03

回答

18

这是在行动comma operator:它计算它的操作数和返回的最后一个,你的情况2. 这样,相当于有:

int *num = new int[2]; 

这可能是安全地说,​​部分原因并非如此,除非是一个诡计的问题。

编辑:谢谢Didier Trosset。

+0

逗号运算符返回第一个操作数还是最后一个? – AraK 2010-06-24 06:42:17

+4

它返回最后一个。 – 2010-06-24 06:42:57

+1

这看起来很像Didier回答..你使用相同的源代码,还是程序员只是想像一样:) – Default 2010-06-24 06:49:29

15

这是工作中的逗号操作:它计算它的操作数,并返回最后一个,你的情况2,这样,相当于有:

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

请注意,SO上的帖子文本是以需要归属的许可证发布的。你可以复制粘贴,但你应该引用来源。 – avakar 2010-06-24 07:14:28

+0

Eugen Dinca在2分钟前发布了完全相同的答案。我不确定重新发布他的答案只是为了纠正一个词更有效(更优雅),而不仅仅是指出错误,以便他能够解决他的答案。 – ereOn 2010-06-24 07:32:36

+0

我没想到我可以编辑他人的答案。我实际上首先在评论中指出了错误,你可以看到它,并在复制粘贴他的答案以纠正错误后几分钟。对于不正确的行为,我表示歉意。 – 2010-06-24 08:02:34

11

您正在使用逗号操作符,这是使代码做一些你可能乍看不到的东西。

逗号运算符评估LHS操作数,然后评估并返回RHS操作数。所以在25, 2的情况下,它会评估25(什么都不做),则计算并返回2,使该行代码等同于:

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

//声明一个一维数组
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 };