指针访问二维数组的困惑。解决方法
指针访问二维数组的困惑。
#include <iostream>
#include <string>
using namespace std;
void main()
{
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int i;
// 输出每一行的地址
for(i=0;i <4;i++)
{
cout < < "第 " < < i+1 < < "行的起始地址: " < < endl;
cout < < a[i] < < endl;
cout < < &a[i] < < endl;
cout < < a+i < < endl;
cout < < *(a+i) < < endl;
cout < < &a[i][0] < < endl;
cout < < endl;
}
}
看了一本教程,有个例子是使用指针输出一个二维数组每一行的地址。程序代码如上,我始终想不明白的是为什么 &a[i] 和 a[i] 都表示每一行的地址?同样为什么 a+i 和 *(a+i) 都表示每一行的地址?
我能理解的是a[i] 、a+i 和 &a[i][0]表示每一行的地址。
------解决方案--------------------
它们的值相同,可是类型不同。
可以试试cout < < typeid(&a[i]).name() < < (int)(&a[i]) < < endl;
每个都打出来试试
#include <iostream>
#include <string>
using namespace std;
void main()
{
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int i;
// 输出每一行的地址
for(i=0;i <4;i++)
{
cout < < "第 " < < i+1 < < "行的起始地址: " < < endl;
cout < < a[i] < < endl;
cout < < &a[i] < < endl;
cout < < a+i < < endl;
cout < < *(a+i) < < endl;
cout < < &a[i][0] < < endl;
cout < < endl;
}
}
看了一本教程,有个例子是使用指针输出一个二维数组每一行的地址。程序代码如上,我始终想不明白的是为什么 &a[i] 和 a[i] 都表示每一行的地址?同样为什么 a+i 和 *(a+i) 都表示每一行的地址?
我能理解的是a[i] 、a+i 和 &a[i][0]表示每一行的地址。
------解决方案--------------------
它们的值相同,可是类型不同。
可以试试cout < < typeid(&a[i]).name() < < (int)(&a[i]) < < endl;
每个都打出来试试