`int a [6] [(2,2)]`数组是什么意思?

时间:2015-04-01 06:27:34

标签: c arrays

阵列的第二个维度尚不清楚。此数组的大小为48,其中int为2个字节,但int a[6][4]int a[6][(2,2)]之间的确切差异是什么?

3 个答案:

答案 0 :(得分:14)

  

int a[6][4]和int a[6][(2,2)]的确切区别是什么?

有很大的不同。 int a[6][(2,2)]大致相当于int a[6][2](2,2)表达式涉及comma operator并评估为2

微妙的区别(参见@Virgile的评论)是(2,2)不是C中的常量表达式。所以int a[6][(2,2)]实际上是一个大小为6的数组可变长度数组< / em>的。从技术上讲,它确实等同于

int n = 2;
int a[6][n];

答案 1 :(得分:3)

在您的代码中

int a[6][(2,2)]

基本上是

int a[6][2];

说明

根据C11标准,章节§6.5.17,逗号运算符,

  

逗号运算符的左操作数被计算为void表达式;它的评估与右操作数之间存在一个序列点。然后评估右操作数;结果有其类型和价值。

int a[6][(2 , 2)];
          ^   ^
          |   |
         [A]  |
             [B]

我们假设AB,运算符的两个操作数。然后,顺序

  1. A评估为2(作为void expression;)。结果被丢弃。
  2. B评估为2。由于,运算符具有右侧操作数的类型和值,因此最终结果为2
  3. 基本上,int a[6][(2,2)];变为int a[6][2];

答案 2 :(得分:1)

int a[6][(2,2)] = int a[6][2];

逗号(,)运算符的识别率最低,因此您可以获得上面的数组。

你可以自己测试一下

int main(void) {
int a[6][4];
int b[6][(2,2)];

printf("%d\n",sizeof(int));
printf("%d %d\n",sizeof(a),sizeof(b));
    return 0;
}

int x = (3,4);那么您期望x的价值是什么?

评估结果为x=4同样适用于您的数组。