在 C 中获取像数组一样的 char 元素



我已经实现了一个初始大小的动态数组,并在其中插入了一个两列的数组,类似于 {{"aa","bb"},{"cc","dd"},{"ff","gg"}}这是我的代码.该元素看起来可以直接存储在数组中,但我不知道如何获取像ptr_arr[i][j]这样的元素。

typedef struct {
    char **array;
    size_t used;
    size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
    a->array = (char **)malloc(initialSize * sizeof(char *));
    int i;
    for (i = 0; i < 2; i++) {
        a->array[i] = (char *) malloc(initialSize * sizeof(char *));
    }
    a->used = 0;
    a->size = initialSize;
}
void insertArray(Array *a, char* (*element)[2]) {
    if (a->used == a->size) {
        a->size *= 2;
        a->array = (char **)realloc(a->array, a->size * sizeof(char));
    }
    a->array[a->used++] = *(*element);
}
int main(int argc, const char * argv[]) {
    Array ptr_arr;
    initArray(&ptr_arr, 1);
    char *b[] = {"85","9u"};
    insertArray(&ptr_arr, &b);
    printf("%s n", (ptr_arr.array[0][1])); //this is just i want to use
    return 0;
}

像这样

#include <stdio.h>
#include <stdlib.h>
typedef struct {
    char* (*array)[2];
    size_t used;
    size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
    a->array = malloc(initialSize * sizeof(char *[2]));
    a->used = 0;
    a->size = initialSize;
}
void insertArray(Array *a, char* (*element)[2]) {
    if (a->used == a->size) {
        a->size *= 2;
        a->array = realloc(a->array, a->size * sizeof(char *[2]));
    }
    a->array[a->used][0] = element[0][0];
    a->array[a->used++][1] = element[0][1];
}
int main(int argc, const char * argv[]) {
    Array ptr_arr;
    initArray(&ptr_arr, 1);
    char *b[] = {"85","9u"};
    insertArray(&ptr_arr, &b);
    printf("%s n", (ptr_arr.array[0][1]));//9u
    free(ptr_arr.array);
    return 0;
}

二维数组是指向其他数组的指针数组。要动态执行此操作,您必须为每行分配一个单维数组和 1 个单维数组来保存这些数组(行(的指针。像这样:

char **Array;
char *Array_line;
Array = malloc(initialSizeY * sizeof(char *));
for(int i=0; i<initialSizeY; i++)
{
    Array_line = malloc(initialSizeX * sizeof(char));
    Array[i] = Array_line;
}

然后你可以使用 Array[i][j] 访问你的数据,其中 i 指向数组的第 i 行,j 是该行的第 j 个字符。

要释放此数组,您应该首先对其进行爬网,释放它的每一行 (Array[i](,然后释放指针持有者数组 (Array(。

相关内容

最新更新