您好我尝试了以下代码:
int *a=&matrice[4][0];
cout<<*a<<"\n\n";
int *b;
b = &matrice[4,4];
matrice的定义如下:int matrice[5][5];
我填充了一些正常的int值。
第一个作业有效但第二个作业没有错误:
a value of type "int (*)[5]" cannot be assigned to an entity of type "int * "
。
我希望他们两个在编译时给我一个错误。
你能解释为什么会出现这种不同的行为吗?
答案 0 :(得分:7)
表达式
&matrice[4,4]
没有达到预期的效果,因为表达式
4,4
评估为4
。这是逗号运算符的一个示例,它计算两个操作数并返回第二个操作数。
答案 1 :(得分:2)
&matrice[4][0]
的类型为int *
,您将其分配给同级a
的{{1}}。没错。你不会得到任何类型的错误。
int *
运算符和matrice[4,4]
类型matrice[4]
的影响, ,
未表示2D矩阵,而是评估为&matrice[4]
。试试这个;
int(*)[5]
答案 2 :(得分:0)
在第一种情况下,您将指针地址分配给a
。 matrice
在内部被定义为指针数组的指针,你将一个这样的向量的地址变为a
。
第二个是在索引引用中使用逗号运算符。这也是不正确的。