指针赋值不同的行为

时间:2013-10-20 17:07:24

标签: c++ pointers

您好我尝试了以下代码:

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 * "

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

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

3 个答案:

答案 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)

在第一种情况下,您将指针地址分配给amatrice在内部被定义为指针数组的指针,你将一个这样的向量的地址变为a

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