我对指向二维数组声明的指针有一些问题,
我在下面写了一些代码:
typedef int ptr2di[3][3];
void main()
{
int a[3][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
ptr2di *ptr=&a;
//ptr2di *ptr=a;
cout << a << endl << &a;
}
输出:
0029F940
0029F940
结论:a =&amp; a =数组的基址。
然后我在ptr2di
声明处改变了一点:
//ptr2di *ptr=&a;
ptr2di *ptr=a;
它有一个错误C2440:'初始化':connot从'int [3] [3]'转换为'ptr2di(*)'。
所以,这是我的问题,我无法理解a
和&a
之间的区别是什么?
大家可以帮我解释一下吗?
答案 0 :(得分:0)
我猜测a的值实际上是0029F940(因为它是一个数组)而cout只是查看该值,但是编译器将a视为数组int [3] [3]并且将会不允许将它分配给ptr2di *,它期望指向int [3] [3]的指针。因此,a和&amp; a的值是相同的,但类型不同,编译器正在检查合法分配的类型。
类似的例子:
int a = 1;
// Valid: Assigning the address of a (which is an int) to a pointer to an int
int *ptr = &a;
// Invalid: Assigning an the int a to a pointer to an int
int *ptr = a;
如果你这样做会怎么样? cout&lt;&lt; a [0] [0]&lt;&lt; endl&lt;&lt; &安培;一个;