【发布时间】:2011-02-15 09:09:08
【问题描述】:
如果这是一个非常简单的问题,我很抱歉,但我对 C 语言真的很生疏,谷歌搜索到目前为止没有帮助。我有一个 C 函数,它接受一个结构数组和一个整数:
int foo(struct record *records, int n)
{
}
还有一个链表,其中每个节点都有一个结构:
struct rnode
{
struct record rec;
struct rnode *next;
}
结构记录是:
struct record
{
enum recordtype type;
union recordvalue
{
int intval;
char strval[19];
} value;
};
inside foo(struct record , int) 我正在遍历链表并将前“n”个结构记录分配到数组中,例如:
int foo(struct record *records, int n)
{
int count = 0;
struct rnode *cur = recordlist;
while(cur != NULL)
{
records[count] = cur->rec; //Basically, how do I write this line?
printf("%d\n", records[count].type); //Both these print the correct values
printf("%d\n", records[count].value.intval); //Prints correct values
count++;
}
}
我试着做: 记录[计数] = cur->rec
编译但当我执行以下操作时:
struct record *records = malloc(sizeof(struct record)*n);
foo(records, n); //This should populate the array records but it isn't.
//If I print record[0].value.intval here I get 0.
但是当我将 &records[0] 传递给另一个函数时:
checkrecord(&record[0]);
声明检查记录的位置:
checkrecord(const struct record *r)
在该函数内部,r->type 和 r->value.intval 都返回 0 而不是正确的值。
我很确定我正确地将结构记录存储到数组中,但我不确定我做错了什么。
我的意思不是听起来很固执,但问题是我不能随意更改 checkrecord() 函数,但我可以更改将参数传递给它的方式。
【问题讨论】:
-
records[count] = cur->rec是对的,但我没有通过检查&record[1]得到你想要完成的事情。你想要结构里面的东西,records[1].some_member -
@nos 出现在...
&record[1]只是要求指向第一条记录的指针...它永远不可能是“结构的 值” -
是的,我打错了一些东西。我现在对其进行了编辑以澄清一点。
-
然后发生了完全不同的事情,发布的代码没有任何问题。尝试编写一个给出此行为的完整示例。你漏掉了重要的部分。
标签: c arrays linked-list struct