#include<iostream>
//第1种形式:
void try1(int(*p)[2][6])
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 6; j++)
{
std::cout << *(*(*p + i) + j);
}
std::cout << std::endl;
}
}
//第2种形式:
void try2(int*p,int row,int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
std::cout << *(p + i*col+ j);
}
std::cout << "\n";
}
}
// 比较 第1种 和 第2种 的方法实际是否一致;
void compare(int(*p)[2][6], int*p2)
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 6; j++)
{
//比较实际地址是否相等
bool isSame = (int *)(*(*p + i) + j) == (int *)(p2 + i * 6 + j) ? 1 : 0;
std::cout << isSame;
}
std::cout << std::endl;
}
}
//第3种形式
void try3(int(&p)[2][6])
{
//p[i][j];...
}
int main()
{
int a[2][6];
for (int i = 0; i < 2; i++)
{
static int var = 0;
var++;
for (int j = 0; j < 6; j++)
{
a[i][j] = j+ var;
}
}
std::cout << "method 1:" << std::endl;
try1(&a);
std::cout << "method 2:" << std::endl;
try2((int*)a, 2, 6);//强制a转化为int元素的地址;
std::cout << "next compare:" << std::endl;
compare(&a, (int*)a);
return 0;
}
对于第2种方法,证明了数组在内存中是线性排列的,形式如下: