首页 > 解决方案 > 如何声明固定大小元素的二维数组指针

问题描述

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

char ar[][4];

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

所以我尝试了这个;

char* ar[4];

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

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

标签: carrays

解决方案


声明类似的东西

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);

推荐阅读