數組的第二個維度不明確。這個數組的大小是48,其中int
是2個字節,但是int a[6][4]
和int a[6][(2,2)]
之間的確切區別是什麼?`int a [6] [(2,2)]`array是什麼意思?
回答
int a[6][4]
和inta[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陣列大小2個可變長度數組的。因此從技術上講,它確實是相當於
int n = 2;
int a[6][n];
實際上,'int a [6] [(2,2)]'不是_exactly_與int a [6] [2]'相同:「(2,2)'不是一個整型常量表達式標準第6.6節的意義)。這意味着前者在技術上是一個不能隨處使用的可變長度數組。例如'gcc'會拒絕這樣的聲明作爲全局變量。 – Virgile 2015-04-01 08:21:57
@Virgile這很有趣。它似乎是C++中的一個常量表達式。我澄清了這一點。 – juanchopanza 2015-04-01 09:12:45
int a[6][(2,2)] = int a[6][2];
逗號(,
)經營者有一個至少percedence所以你得到一個數組如上。
你可以測試一下自己
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
同樣適用於您的數組。
在你的代碼
int a[6][(2,2)]
基本上是
int a[6][2];
說明:
按照該標準C11
,章§6.5.17
,逗號運算,
逗號運算符的左操作數被評估爲void表達式;它的評估與右操作數的評估之間有一個順序點。然後評估右操作數;結果有它的類型和價值。
int a[6][(2 , 2)];
^^
| |
[A] |
[B]
假設,A
和B
是,
操作的兩個操作數。然後,順序地
A
被評估以2
(作爲void expression;
)。結果被丟棄。B
評估爲2
。由於,
運算符具有右側操作數的類型和值,因此最終結果爲2
。
所以基本上,int a[6][(2,2)];
成爲int a[6][2];
- 1. int A [] = {}是什麼意思?
- 2. * array []是什麼意思?
- 3. int values []是什麼意思?
- 4. 什麼是(int - > int) - >(int - > int)是什麼意思?
- 5. (void)sizeof(0 [array])是什麼意思?
- 6. int test [] = new int [0]是什麼意思?
- 7. 是什麼(INT - > INT)是什麼意思?
- 8. PHP:`array(&$ this)`是什麼意思?
- 9. 在Ruby中,array * string是什麼意思?
- 10. [array/object]中的[literal]是什麼意思?
- 11. s_i = s [i] - 'a'是什麼意思?
- 12. println(f(a))是什麼意思?
- 13. 2 [p]和6 [p]是什麼意思?
- 14. 什麼是ocaml類型'a。 'a - >'是什麼意思?
- 15. 操作c = a +++ b是什麼意思?
- 16. int x; arr [100]是什麼意思?
- 17. 是什麼意思:是什麼意思?
- 18. 什麼是A <int(int)>是什麼意思?這個技術的名字是什麼?
- 19. 數據( - >)a b是什麼意思?
- 20. `size * = b - a`是什麼意思?
- 21. 「const char(&a)[N]」是什麼意思?
- 22. C++中的* const * a是什麼意思
- 23. a >> = b是什麼意思?
- 24. [a-z0-9]是什麼意思?
- 25. 「特質A <:B」是什麼意思?
- 26. Elm docs - 「a」是什麼意思?
- 27. 類圖中的「a」是什麼意思?
- 28. REGEX是什麼意思? [a-zA-Z] | \ d
- 29. 'a'在Ruby open()中意味着什麼?| f |是什麼意思?意思?
- 30. 這是什麼意思? int foo = foo + 4;
的毫無意義的,混淆代碼只是另一種情況。我不知道爲什麼人們如此着迷於這樣的胡說,並瘋狂地提出有關它的任何話題...... [在C中逗號操作符做什麼?](http://stackoverflow.com/questions/52550/what-做最逗號操作-DO在-C)。 – Lundin 2015-04-01 07:01:07