分類
自製

初學者也可輕鬆應用的 C 語言動態陣列簡易範例

想在 C 語言裡面使用動態陣列還真是有點複雜。在這裡提供用指標實作一維陣列、二維陣列與三維陣列的範例。已盡量寫成簡易形式,就算不太了解其中原理也能輕鬆修改,歡迎有需要的朋友直接拿去用。

動態一維陣列

[c]/*
* 動態陣列 char array[xSize] 的範例
* 應用時,只需修改「設定陣列型態」、「設定陣列大小」與「使用陣列」的地方即可。
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
int xSize;
char *array; /* 設定陣列型態 */

/* 設定陣列大小 */
xSize = 2;

/* 配置一維陣列 */
array = calloc(xSize, sizeof(*array));
if (array == NULL)
{
fprintf(stderr, "記憶體不足。\n");
exit(1);
}

/* 使用一維陣列 */
array[1] = 0;
printf("%d\n", array[1]);

/* 釋放一維陣列 */
free(array);

return 0;
}[/c]

動態二維陣列

[c]/*
* 動態陣列 char array[xSize][ySize] 的範例
* 應用時,只需修改「設定陣列型態」、「設定陣列大小」與「使用陣列」的地方即可。
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i;
int xSize;
int ySize;
char **array; /* 設定陣列型態 */

/* 設定陣列大小 */
xSize = 2;
ySize = 3;

/* 配置二維陣列 */
array = calloc(xSize, sizeof(void *));
if (array == NULL)
{
fprintf(stderr, "記憶體不足。\n");
exit(1);
}
array[0] = calloc(xSize * ySize, sizeof(**array));
if (array[0] == NULL)
{
fprintf(stderr, "記憶體不足。\n");
free(array);
exit(1);
}
for (i = 1; i < xSize; ++i)
{
array[i] = array[0] + ySize * i;
}

/* 使用二維陣列 */
array[1][2] = 0;
printf("%d\n", array[1][2]);

/* 釋放二維陣列 */
free(array[0]);
free(array);

return 0;
}[/c]

動態三維陣列

[c]/*
* 動態陣列 char array[xSize][ySize][zSize] 的範例
* 應用時,只需修改「設定陣列型態」、「設定陣列大小」與「使用陣列」的地方即可。
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i;
int xSize;
int ySize;
int zSize;
char ***array; /* 設定陣列型態 */

/* 設定陣列大小 */
xSize = 2;
ySize = 3;
zSize = 4;

/* 配置三維陣列 */
array = calloc(xSize, sizeof(void *));
if (array == NULL)
{
fprintf(stderr, "記憶體不足。\n");
exit(1);
}
array[0] = calloc(xSize * ySize, sizeof(void *));
if (array[0] == NULL)
{
fprintf(stderr, "記憶體不足。\n");
free(array);
exit(1);
}
array[0][0] = calloc(xSize * ySize * zSize, sizeof(***array));
if (array[0][0] == NULL)
{
fprintf(stderr, "記憶體不足。\n");
free(array[0]);
free(array);
exit(1);
}
for (i = 1; i < xSize; ++i)
{
array[i] = array[0] + ySize * i;
}
for (i = 1; i < xSize * ySize; ++i)
{
array[0][i] = array[0][0] + zSize * i;
}

/* 使用三維陣列 */
array[1][2][3] = 0;
printf("%d\n", array[1][2][3]);

/* 釋放三維陣列 */
free(array[0][0]);
free(array[0]);
free(array);

return 0;
}[/c]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *