方法一·:
很容易联想到使用指针数组
<pre name="code" class="cpp">#define ROW 3
#define COL 4
void Test4()
{
int(*p)[COL] = (int(*)[COL])malloc(sizeof(int)*ROW*COL); //注意是int(*p)[COL],<span style="color:#ff0000;">是COL不是ROW</span>
for (int i = 0; i < ROW; ++i)
{
for (int j = 0; j < COL; ++j)
{
p[i][j] = i*COL + j;
}
}
for (int i = 0; i < ROW; ++i)
{
for (int j = 0; j < COL; ++j)
{
printf("%d ", p[i][j]);
}
}
}
方法二:
使用二级指针,就像虚表指针与虚表一样(注意C语言中不能直接返回一个二维数组,也不能是一个数组指针,所以若要动态开辟一个二维数组并返回,那么只能通过这种方式)
void Test()
{
int **p = (int **)malloc(sizeof(sizeof(int*)*ROW));
for (int i = 0; i < ROW; ++i)
{
p[i] = (int *)malloc(sizeof(int)*COL);
}
for (int i = 0; i < ROW; ++i)
{
for (int j = 0; j < COL; ++j)
{
p[i][j] = i*COL + j;
}
}
for (int i = 0; i < ROW; ++i)
{
for (int j = 0; j < COL; ++j)
{
printf("%d ", p[i][j]);
}
}
}