指向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 );
我最近看到这段代码,用于形成一个队列,使用数组来存储二叉树的节点。
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 );