gpt4 book ai didi

c - 如何声明固定大小元素的二维数组指针

转载 作者:行者123 更新时间:2023-11-30 16:11:36 24 4
gpt4 key购买 nike

我想在头文件中声明一个二维数组,例如;

char ar[][4];

因此,在程序运行之前,数组没有确定的已知元素数量(但每个元素的长度是已知的)。但我不能在这里使用 malloc,因为 ar 是这样声明的。

所以我尝试了这个;

char* ar[4];

但这只给出了 4 个指针的数组(不是我的目标)。

我是否必须使用 char** 或者还有另一种解决方法可以用来声明每个元素的长度?

最佳答案

声明类似的内容

char ar[][4];

通常会遇到编译器错误,例如

'ar': unknown size

因为固定数组必须在编译时具有定义的大小。

要使数组在运行时定义其大小,您必须使用动态分配。

这是一个非常简单的示例。

char** alloc2dArray(const int rows, const int rowlen) {
// allocate the array of rows.
size_t size = rows * sizeof(char*);
char** pptr = (char**)malloc(size);

// allocate the rows.
for (int i = 0; i < rows; i++) {
pptr[i] = (char*)malloc(rowlen);
}
return pptr;
}

void free2dArray(char** pptr, const int rows) {
// free the rows
for (int i = 0; i < rows; i++)
free(pptr[i]);
// free array of rows
free(pptr);
}

并注意,使用指针到指针,您会得到方括号糖

const int rows = 7;
const int rowlen = 4;
char** arr = alloc2dArray(rows, rowlen);
char c = '@';
for (int i = 0; i < rows; i++) {
int j = 0;
for (; j < rowlen; j++) {
arr[i][j] = c++;
}
}
free2dArray(arr, rows);

关于c - 如何声明固定大小元素的二维数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com