ListEntry类用法 #包括 #包括“stdafx.h” #包括“List.h” 类型定义结构列表\u节点 { 列表\条目列表; int val1; }列表节点,*PLIST节点; int _tmain(int argc,_TCHAR*argv[] { int i=0; PLIST_节点pNewnode; pNewnode=新列表\节点; 列表输入头; 初始化头部和头部; 对于(i=0;ival1=i; InsertTailList(&head,&pNewnode->list); pNewnode=NULL; } 而(!IsListEmpty(&head)) { PLIST_ENTRY removeNode=RemoveHeadList(&head); PLIST_节点mydatanode=(PLIST_节点)包含_记录 (removeNode,LIST_节点,val1); printf(“%d\n”,mydatanode->val1); } 返回0; }
有了这段代码,我无法正确获取val1数据,它给了我垃圾值?我做错了什么吗?请阅读。第三个参数描述为: 字段[输入] 地址指向的字段的名称,包含在类型的结构中 我怀疑您的代码:ListEntry类用法 #包括 #包括“stdafx.h” #包括“List.h” 类型定义结构列表\u节点 { 列表\条目列表; int val1; }列表节点,*PLIST节点; int _tmain(int argc,_TCHAR*argv[] { int i=0; PLIST_节点pNewnode; pNewnode=新列表\节点; 列表输入头; 初始化头部和头部; 对于(i=0;ival1=i; InsertTailList(&head,&pNewnode->list); pNewnode=NULL; } 而(!IsListEmpty(&head)) { PLIST_ENTRY removeNode=RemoveHeadList(&head); PLIST_节点mydatanode=(PLIST_节点)包含_记录 (removeNode,LIST_节点,val1); printf(“%d\n”,mydatanode->val1); } 返回0; },c,winapi,C,Winapi,有了这段代码,我无法正确获取val1数据,它给了我垃圾值?我做错了什么吗?请阅读。第三个参数描述为: 字段[输入] 地址指向的字段的名称,包含在类型的结构中 我怀疑您的代码: #include <windows.h> #include "stdafx.h" #include "List.h" typedef struct List_Node { LIST_ENTRY list; int val1; }LIST_NODE, *PLIST_N
#include <windows.h>
#include "stdafx.h"
#include "List.h"
typedef struct List_Node
{
LIST_ENTRY list;
int val1;
}LIST_NODE, *PLIST_NODE;
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
PLIST_NODE pNewnode;
pNewnode = new LIST_NODE;
LIST_ENTRY head;
InitializeListHead(&head);
for (i = 0; i < 3; i++)
{
pNewnode = new LIST_NODE;
pNewnode->val1 = i;
InsertTailList(&head, &pNewnode->list);
pNewnode = NULL;
}
while (!IsListEmpty(&head))
{
PLIST_ENTRY removeNode = RemoveHeadList(&head);
PLIST_NODE mydatanode = (PLIST_NODE)CONTAINING_RECORD
(removeNode,LIST_NODE,val1);
printf("%d\n", mydatanode->val1);
}
return 0;
}
这是不正确的。这是因为包含_RECORD的的第三个参数与您要传递的地址的类型不同。将其设置为val1也没有意义。它需要做的是从列表节点
中包含的列表项
的地址中找出列表节点
的地址
我认为:
PLIST_ENTRY removeNode = RemoveHeadList(&head);
PLIST_NODE mydatanode = (PLIST_NODE)CONTAINING_RECORD(removeNode,LIST_NODE,val1);
应该可以解决您的问题。请阅读,直到您表明您至少花费了一些精力来调试自己的代码-1。是的,我尝试过调试。。。当我看到地址时,RemoveHeadList会为我提供正确的节点地址。但问题是,当我使用CONTAINING_RECORD宏时,节点地址不是我插入的地址。好的开始。我想你已经读过了
PLIST_ENTRY removeNode = RemoveHeadList(&head);
PLIST_NODE mydatanode = (PLIST_NODE)CONTAINING_RECORD(removeNode,LIST_NODE,list);