从struct中获取指向指针的值

时间:2014-04-15 12:41:39

标签: c pointers struct

我有一个结构:

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

我想将structname1structname2相关联。我做的是:

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

然后我尝试访问structname1的{​​{1}}链接:

structname2

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

3 个答案:

答案 0 :(得分:1)

你必须采用以下方式。

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.

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

答案 1 :(得分:0)

您的代码中存在一些问题。首先,您得到ptr错误的类型:它应该是struct structname **而不是int *

但是,如果您尝试进行链接列表,则根本不需要双重间接级别。这很可能是你想要的:

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

这样,将structname1structname2关联起来很简单(假设structname1structname2属于struct structname类型):

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

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

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

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

答案 2 :(得分:0)

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创建对象,这意味着对象将分配在堆而不是堆栈上。这也不要求您为链表中的每个元素a.k.a.节点指定显式名称。这也意味着当你放弃名字的范围时它不会被摧毁。当然,当您不再需要该列表时,您将需要在以后释放所有节点 那么你不需要指向节点中指针的指针,一个简单的指针就足够了。在主程序中,您还应该使用适当的指针。即使所有指针都是相同的尺寸并且可以相互投射,你应该 - 尽可能 - 使用正确的类型。
在这里,我在一个循环中创建了另外5个节点,以演示这种方法的灵活性如何。

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

next->next = current;