📅  最后修改于: 2023-12-03 14:40:25.457000             🧑  作者: Mango
在C语言中,数组是一种非常常见的数据结构。通常情况下,我们定义的数组是固定大小的,但有时候需要定义可变大小的数组,这就需要用到锯齿状数组或数组数组。
数组数组就是每个数组都对应一个数组的数组,可以实现动态设置数组大小的功能。锯齿状数组也是一种动态数组,不同之处在于每个数组的大小可以不一样,形状像锯齿一样。
定义锯齿状数组和数组数组的方法都非常简单,只需要使用指针数组来实现即可。下面是定义锯齿状数组的示例代码:
int main()
{
int **p;
int i, j;
p = (int **)malloc(sizeof(int*) * 3); // 定义3行
for (i = 0; i < 3; i++)
{
p[i] = (int *)malloc(sizeof(int) * (i + 1)); // 定义不同列
for (j = 0; j <= i; j++)
{
p[i][j] = j + 1;
printf("%d ", p[i][j]);
}
printf("\n");
}
return 0;
}
上面的代码定义了一个3行的锯齿状数组,第一行有1个元素,第二行有2个元素,第三行有3个元素。运行后输出:
1
1 2
1 2 3
下面是定义数组数组的示例代码:
int main()
{
int *p[3];
int i, j;
p[0] = (int *)malloc(sizeof(int) * 1); // 第1个数组有1个元素
p[1] = (int *)malloc(sizeof(int) * 2); // 第2个数组有2个元素
p[2] = (int *)malloc(sizeof(int) * 3); // 第3个数组有3个元素
for (i = 0; i < 3; i++)
{
for (j = 0; j <= i; j++)
{
p[i][j] = j + 1;
printf("%d ", p[i][j]);
}
printf("\n");
}
return 0;
}
上面的代码定义了一个3个元素的数组数组,第1个数组有1个元素,第2个数组有2个元素,第3个数组有3个元素。运行后输出:
1
1 2
1 2 3
既然使用数组数组或锯齿状数组的主要目的是动态调整数组大小,那我们就来看看如何实现动态调整。
下面是调整锯齿状数组大小的示例代码:
int main()
{
int **p;
int i, j;
p = (int **)malloc(sizeof(int*) * 2); // 定义2行
for (i = 0; i < 2; i++)
{
p[i] = (int *)malloc(sizeof(int) * (i + 1)); // 定义不同列
for (j = 0; j <= i; j++)
{
p[i][j] = j + 1;
printf("%d ", p[i][j]);
}
printf("\n");
}
// 调整大小
p = (int **)realloc(p, sizeof(int*) * 4); // 定义4行
for (i = 2; i < 4; i++)
{
p[i] = (int *)malloc(sizeof(int) * (i + 1)); // 定义不同列
for (j = 0; j <= i; j++)
{
p[i][j] = j + 1;
printf("%d ", p[i][j]);
}
printf("\n");
}
return 0;
}
上面的代码首先定义了一个2行的锯齿状数组,然后使用realloc函数将数组大小调整为4行。运行后输出:
1
1 2
1 2 3
1 2 3 4
下面是调整数组数组大小的示例代码:
int main()
{
int *p[2];
int i, j;
p[0] = (int *)malloc(sizeof(int) * 1); // 第1个数组有1个元素
p[1] = (int *)malloc(sizeof(int) * 2); // 第2个数组有2个元素
for (i = 0; i < 2; i++)
{
for (j = 0; j <= i; j++)
{
p[i][j] = j + 1;
printf("%d ", p[i][j]);
}
printf("\n");
}
// 调整大小
p[2] = (int *)malloc(sizeof(int) * 3); // 第3个数组有3个元素
for (i = 0; i < 3; i++)
{
for (j = 0; j <= i; j++)
{
p[2][j] = j + 1;
printf("%d ", p[2][j]);
}
printf("\n");
}
return 0;
}
上面的代码首先定义了一个2个元素的数组数组,然后动态增加了第3个数组。运行后输出:
1
1 2
1 2 3
锯齿状数组和数组数组都是非常常见的动态数组,它们的定义和使用非常简单。使用指针数组的特性,我们可以非常方便地调整数组大小,实现动态数组的功能。