【问题标题】:node pointer to point to an array of node pointers指向节点指针数组的节点指针
【发布时间】:2021-02-19 16:04:12
【问题描述】:

我无法理解带有节点和数组的指针。假设我们有这样的结构:

typedef struct node
{
    int x;
    struct node *next;
}node;

如果我有一个节点指针数组,例如:

node *table[50];

我可以说:

table[0] = malloc(26 * sizeof(node*));

有可能吗? 我的意思是 table[0] 是一个指向 node 的指针,但 malloc 将返回一个指向 node 的指针 的指针。 事实上,我想做不止一个(对于新数组中的每个指针,我想创建一个新的节点指针数组,最后最后一个数组的每个元素都会有一个链表) 希望我很清楚,并原谅我的英语不好。

【问题讨论】:

  • 可能,但不是一个好主意。 table[0]node*,所以它指向 node 和大小计算 26 * sizeof(node*) 不匹配。
  • 你想创建节点指针数组,那么为什么不让每个元素都指向节点指针(node **table[50];)?
  • 一般规则是,如果你在malloc() 中为sizeof() 提供一个类型参数,它的* 应该比你分配给的类型少1。
  • node 是链表的一部分。你不需要将它们组成一个数组——table 的每个元素都指向一个节点,它是列表中的第一个节点。
  • 这看起来像一个哈希表。 table 的每个元素都是一个哈希桶。桶本身是一个链表。所以table[i] 指向单个节点,它是列表中的第一个节点。该列表使用next 指针动态增长。

标签: arrays c pointers data-structures nodes


【解决方案1】:

malloc 为你的数据分配空间。

table = (node*)malloc(50 * sizeof(node));

现在表是一个指针,指向内存中可以存储50个节点的空间。

那么你可以把它当作一个数组来使用:

table[n]

【讨论】:

  • 我不太明白。我想知道这个想法是否正确而不改变原来的node *table[50];@ido25
  • 你不能。 [] 是一个数组,包含实际内容。 * 是一个指针,它是动态分配的。 stackoverflow.com/questions/11555997/…
猜你喜欢
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
相关资源
最近更新 更多