2014-04-28 60 views
1

我有一些推式和弹出式代码,我试图理解,并有一个关于弹出功能的问题。流行功能解释

这是节点结构:

struct NODE 
{ 
    int dataitem; 
    struct NODE *link; 
}; 

这是流行音乐功能:

struct NODE* PopD(struct NODE *SP, int *Data) 
{ 
    struct NODE *temp; 

    temp = SP; 
    *Data = temp->dataitem; 
    temp = temp->link; 
    free(SP); 

    return temp; 
} 

所以我的问题是什么呢这行做:*Data = temp->dataitem;

它为什么会走dataitem值变成Data当它不在以后的方法中使用?

+2

它将链表顶节点数据值复制到'Data'指针参数中保存的地址。作为奖励,当您传递空列表(即SP中的NULL值)或空数据目标(Data中的NULL值)时,它也会调用未定义的行为。看看你能否发现[区别](http://pastebin.com/yP54U5cg) – WhozCraig

+0

@WhozCraig - 嘿,好! –

回答

1

的数据经由Data参数中返回。返回值用于更新堆栈指针。代码大概是这样使用的:

struct NODE *stack = NULL; 

// push some items 
// ... 

// pop one 
int data; 
stack = PopD(stack, &data); 
printf("%d\n", data); 
0

当您弹出堆栈的顶部项目时,包含在堆栈顶部的值将通过输出参数返回。

它可能对调用函数有用。

1

调用此函数的人将传递一个指向整数的指针 - 期望该整数将填充堆栈中最顶端的整数。

int x; 
stack = PopD(stack, &x); 
printf("Top of stack was %d\n", x);