指向2D数组声明时遇到问题

时间:2015-01-04 03:15:19

标签: arrays pointers

我对指向二维数组声明的指针有一些问题,

我在下面写了一些代码:

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之间的区别是什么? 大家可以帮我解释一下吗?

1 个答案:

答案 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; &安培;一个;