指向C中结构的双指针有什么用?

What is the use of double pointer to a structure in C?

我最近看到这段代码,用于形成一个队列,使用数组来存储二叉树的节点。

typedef struct node{
  int data;
  node *left, *right;
}Node;

Node** createQueue(int *front, int *rear)
{
  Node **queue = (Node **)malloc(sizeof(Node*)*500);
  *front = *rear = 0;
  return queue;
}

int main(){
  int rear, front;
  Node **queue = createQueue(&front, &rear);
  return 0;
}

队列形成过程中双指针有什么用?

这是整个程序的link:

http://www.geeksforgeeks.org/level-order-tree-traversal/

(方法二)

"double pointer" 是 "a pointer to pointer",从提供的摘录中很难说出为什么程序员决定 he/she 需要这样的结构。

可能是有些任务需要遍历整棵树,但不关心它的tree-ness,这样可以避免递归(我的意思是可能需要修改这些,为了简单遍历一个single-pointer就够了)

如果您有一个 T 类型的对象,例如

T x;

当指向对象的指针的类型为 T *

T *px = &x;

在您的示例中,动态分配了一个 500 指向类型 Node 对象的指针数组。也就是说,数组的每个元素都具有类型 Node *.

Node **queue = (Node **)malloc(sizeof(Node*)*500);

函数malloc returns数组第一个元素的地址。

由于动态分配数组的每个元素都具有类型 Node *,因此指向数组元素的指针将具有类型 Node **.

你可以这样想象

typedef Node * T;

T *queue = ( T *)malloc( sizeof( T ) * 500 );

因此,如果您将 T 替换为 Node *,您将得到

T      *queue = ( T      *)malloc( sizeof( T ) * 500 );
Node * *queue = ( Node * *)malloc( sizeof( Node * ) * 500 );