C 指向指向链接列表的指针数组的指针

C 指向指向链接列表的指针数组的指针,c,arrays,pointers,malloc,C,Arrays,Pointers,Malloc,在过去的6个小时里,我一直在解决这个问题,一直在疯狂地攻击谷歌,但毫无结果 对,我需要一个指向数组的指针。此数组包含指向链接列表的指针。我将不得不malloc它,因为直到运行时我才知道数组的大小 LList **array 这是我的第一个想法,但这只是给了我一个指向一个LList数组的指针。至少这是我的理解。有人能帮我一下吗 编辑:关于如何使用它的一些信息:我正在实现一个非常基本的哈希表。有一个结构包含指向链接列表指针数组的指针。 它需要是指向数组的指针,以便在调整表的大小时使用。我可以将指针

在过去的6个小时里,我一直在解决这个问题,一直在疯狂地攻击谷歌,但毫无结果

对,我需要一个指向数组的指针。此数组包含指向链接列表的指针。我将不得不malloc它,因为直到运行时我才知道数组的大小

LList **array
这是我的第一个想法,但这只是给了我一个指向一个LList数组的指针。至少这是我的理解。有人能帮我一下吗

编辑:关于如何使用它的一些信息:我正在实现一个非常基本的哈希表。有一个结构包含指向链接列表指针数组的指针。
它需要是指向数组的指针,以便在调整表的大小时使用。我可以将指针更改为指向较大的表。

指向对象的指针与指向数组的指针基本相同

int * blah; // an int pointer. It could point to an array of ints, or a single int.
int ** blah; // a pointer to an int pointer. It could point to something that points to an int, or it could be pointing to an array of pointers to single ints, or it could be a pointer that points to an array of ints.

这完全取决于你如何使用它。

听起来你走对了方向

LList **array;
array = malloc(num_ptrs * sizeof(LList*));
array
现在是指向
LList
的指针数组,而
array[3]
等元素将是指向
LList
的指针

数组和指针在C语言中非常相似(但不完全相同!),如经典示例所示:
*(array+2)
主要相当于
数组[2]

编辑: 当需要调整表的大小时,只需
realloc
额外的空间:

LList **new_array;
new_array = realloc(old_array, new_size * sizeof(LList*));
new\u array
old\u array
之后可能是或可能不是同一个指针,但无论哪种方式
new\u array
都保证是指向足够空间容纳新数组的指针(或者
NULL
如果无法分配内存)

第二次编辑: 如user411313所述,如果您想要实际指针指向数组,则需要获取数组的地址:

LList ***p_array;
p_array = &array;

如果你必须写你自己的链表,你可以这样做

typedef struct LLNode {
    LLNode* next;
    int     data;
} LLNode;

LLNode* linkedList = null; // a linked list

LLNode**  linkedListArray = (LLNode**) malloc( arraySize* sizeof(LLNode*) );

LLNode*** pointerToLListArray = &linkedListArray;
使用链接列表库:

LList*  linkedListArray = (LList*) malloc( arraySize* sizeof(LList) );

LList** pointerToLListArray = &linkedListArray;

指向指针的指针也可以是指针数组


int nLists; /* number of lists*/
LList **array;
array = (LList **)malloc(nLists * sizeof(LList *));

将使
array
成为指向
LList
的指针数组。然后,
array[i]
将为您提供指向数组中第i个链表的指针。

最初您在顶部说的是“指向一个数组的指针…[它]包含指向链表的指针”,但您的新编辑现在说的是“指向链表数组的指针”。哪个?接得好。重新编辑。指向链接列表指针数组的指针就是我要做的。我在下面编辑了我的回复,以显示如何调整它的大小。这是你在新编辑背后的主要顾虑,还是你还想知道什么?错了。问题是指向指向LList的指针数组的指针。您的解决方案只是一个指向LList的指针数组。
typedef struct LList LList;
struct LList {
int value;
LList *next; };

LList *(*p)[3]; /* pointer to an array of 3 pointers to LList */
LList ll1 = {11};
LList ll2 = {22};
LList ll3 = {33};
size_t sizeofarray = sizeof*p/sizeof**p; /* calc arraysize at runtime here */
p = malloc( sizeofarray * sizeof**p ); /* allocate space for each LList-pointer in array */
(*p)[0] = &ll1;
(*p)[1] = &ll2;
(*p)[2] = &ll3;
/* test output here: */
printf("\n%d\n%d\n%d", ((*p)[0])->value,((*p)[1])->value,((*p)[2])->value);
free(p);