我已经实现了一个具有初始大小的动态数组,并在其中插入了两列的数组,类似于{{"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;
}
答案 0 :(得分:1)
#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 :(得分:0)
二维数组是指向其他数组的指针数组。要动态地执行它,您必须为每一行分配一个单维数组,并为一个单维数组分配一个数组(行)的指针。 类似的东西:
WindowsError: [Error 126] The specified module could not be found
然后你可以使用 Array [i] [j] 来访问你的数据,其中 i 指向数组的第i行, j 是该行的第j个字符。
要释放此数组,首先应该抓取它,释放它的每一行(Array [i])然后释放指针持有者数组(Array)。