繁体   English   中英

获取从指针到结构体指针的值

[英]get the value from pointer to pointer in struct

我有一个结构:

struct structname
{
    structname** link;
    int total;
}

我想将structname1链接到structname2 我所做的是:

int *ptr = &structname2;
structname1 -> link = &ptr;

然后我尝试访问structname1的链接,即structname2

structname *test = structname1 -> link;

这是正确的方法吗? 当我尝试打印时,打印了一些未知符号。 有人可以帮我弄这个吗? 谢谢。

您必须按照以下方式进行。

struct structname structname1, structname2; //define two structures structname1 and structname2 of type structname.
struct structname * ptr; // ptr is a pointer to struct of type structname.
struct structname ** ptr2 // ptr2 is a double pointer to struct of type structname.
ptr = &structname2; // ptr points to structname2
ptr2 = &ptr; // ptr2 points to ptr and ptr points to structname2;
structname1.link = ptr2; // now link is a double pointer to structname2.

如果我错了或遗漏了,请让我纠正

您的代码中有几处错误。 首先,你把ptr的类型弄错了:它应该是struct structname **而不是int *

但是如果你正在尝试做一个链表,你根本不需要双重间接级别。 这很可能是您想要的:

struct structname
{
    struct structname *link;
    int total;
}

这样,将structname1structname2链接起来structname1简单了(假设structname1structname2struct structname类型):

struct structname *ptr = &structname2;
structname1.link = ptr;

如果structname1structname2的类型为struct structname * ,那么您需要改为:

struct structname *ptr = structname2;
structname1->link = ptr;

您也可以删除中间变量ptr ,这里用处不大。

struct node {
    struct node *next;
    int cargo;
}

struct node *current, *last, *next;
unsigned char i;
current = (struct node*)(calloc(sizeof(struct node)));

for (last = current, unsigned char i = 5; i--;) {
    next = (struct node*)(calloc(sizeof(struct node)));
    next->cargo = i;
    last->next = next;
}

上面的代码是一个非常简单的链表。 请注意,与您的代码相比,我更改了一些内容。 我使用calloc创建对象,这意味着对象将在堆上而不是堆栈上分配。 这也不需要您为每个元素(也就是链表中的节点)提供明确的名称。 这也意味着当你离开名称的范围时它不会被破坏。 当然,当您不再需要该列表时,您将需要稍后释放所有节点。
那么你不需要一个指向节点中的指针的指针,一个简单的指针就足够了。 在您的主程序中,您还应该使用适当的指针。 尽管所有指针的大小都相同并且可以相互转换,但您应该 - 只要有可能 - 使用正确的类型。
在这里,我在循环中创建了另外 5 个节点,以演示“这种方法的灵活性”。

如果你想做一个循环链表,那也很容易。 只需附加这些行:

next->next = current;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM