c - 如何声明固定大小元素的二维数组指针
问题描述
我想在头文件中声明一个二维数组,例如;
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);
推荐阅读
- regex - 正则表达式:如何捕获 (1, 2) (1,1)(1, 1) 中的数字
- python - 如何使用 Pandas 在多表 Excel 工作簿中用新数据框覆盖现有工作表?
- java - 将数据从 Fragment 传递到另一个 Fragment
- git - 如何以某种方式将两个 git 托管项目组合到一个分支中,并且两者都可以轻松更新?
- ios - 选择 SWIFT 时更改按钮背景颜色
- routes - 内核如何路由地址绑定套接字?
- google-chrome - 如何使用 GreaseMonkey/TamperMonkey 更改文本字段的输入属性?
- button - 未显示通过按钮触发的 JQuery 对话框
- asp.net-core - 将静态网站从另一个 repo 导入到 ASP.NET Core 项目的 wwwroot 的最佳方法
- python-3.x - 查找和存储 pandas df 的主要行到另一个 df