2

嗨,我尝试了以下代码:

int *a=&matrice[4][0];
cout<<*a<<"\n\n";

int *b;
b = &matrice[4,4];   

矩阵的定义如下:int matrice[5][5];我用一些正常的 int 值填充它。

第一个任务有效,但第二个没有错误:

a value of type "int (*)[5]" cannot be assigned to an entity of type "int * ".

我希望他们两个在编译时都会给我一个错误。

你能解释为什么会有这种不同的行为吗?

4

3 回答 3

7

表达方式

&matrice[4,4]

不符合您的预期,因为表达式

4,4

评估为4。这是逗号运算符的示例,它计算两个操作数并返回第二个操作数。

于 2013-10-20T17:10:28.620 回答
2

&matrice[4][0]是 typeint *并且您将其分配给awhich 也是 type int *。这没有错。您不会收到任何类型的错误。

matrice[4,4]不是表示二维矩阵,而是由于运算符matrice[4]的影响而计算结果为. 尝试这个; ,&matrice[4]int(*)[5]

 b = &matrice[4][4];
于 2013-10-20T17:09:34.293 回答
0

在第一种情况下,您将指针地址分配给a. matrice在内部定义为指向指针数组的指针,并且您将一个这样的向量的地址放入a.

第二个是在索引引用中使用逗号运算符。那也是不正确的。

于 2013-10-20T17:10:48.807 回答