gpt4 book ai didi

c - 获取结构深处的数据 C

转载 作者:行者123 更新时间:2023-11-30 14:49:05 25 4
gpt4 key购买 nike

我刚刚遇到了一些很奇怪的事情。当我有一个指向一个结构的指针,其中包含另一个指向相同类型结构的指针时,如果我想从“第二个”结构中获取数据(如果您没有明白我的意思,也许下图将描述更好)...

                      1
ptr ---> |------| 2
| next ---> |------|
| data | | next |
|------| | data | <= data which i desire to get
|------|

如果我不想声明另一个指针变量,我应该如何访问所需的数据?

如果所需的数据更加“深入”怎么办?

我尝试了这样的测试,但感觉有点......“看起来很糟糕”,而且我对没有编译器警告这一事实感到非常惊讶:

ptr2struct.c

#include <stdio.h>
#include <stdlib.h>

typedef struct Structure structure;
struct Structure {
int data;
structure *next;
};

int main()
{
structure *ptr = malloc(sizeof(*ptr));

/* First structure */
ptr->data = 1;
ptr->next = malloc(sizeof(ptr->next));

/* Second structure */
ptr->next->data = 2;
ptr->next->next = malloc(sizeof(ptr->next->next));

/* Third structure, why not */
ptr->next->next->data = 3;
ptr->next->next->next = NULL;

printf("ptr->data = %d\n", ptr->data);
printf("ptr->next->data = %d\n", ptr->next->data);
printf("ptr->next->next->data = %d\n", ptr->next->next->data);

return 0;
}

我想有很多更好的方法可以做到这一点,我知道最好的方法可能是遍历或声明额外的指针,但是如果约束不允许这样的方法怎么办?实现这一目标的总体最佳方法是什么?

顺便说一句,这不是我的硬件,只是好奇:)

祝您有美好的一天,感谢您的提示!

最佳答案

第一个错误是:

structure *ptr = malloc(sizeof(ptr));

这分配了足够的空间来容纳 ptr这是一个指针,你需要

structure *ptr = malloc(sizeof(*ptr));

正确分配所有内容后,访问第一个元素中的内容,如下所示:

ptr->data; // the data
ptr->next; // pointer to the next struct in the chain

访问第二个struct中的内容像这样

ptr->next->data; // data in the second struct
ptr->next->next; // pointer to the third struct

等等。

刚刚阅读了有关该问题的一些评论,我应该补充一点 ptr->next->next本质上是危险的,除非您知道 ptr 两者都存在和ptr->next不为空。另外,malloc不保证内存归零,因此在调用 malloc 之后您应该始终确保next指针为NULL .

如果您有一个长链,并且最后一项由 NULL 表示next您可以使用 for 很好地迭代链循环例如

for (structure* current = ptr ; current != NULL ; current = current->next)
{
printf("%d\n", current->data);
}

或者,如果您想查找n第一项

structure* ptrAtIndex(structure* start, int index) 
{
for (structure* current = ptr, int i = 0 ; current != NULL ; current = current->next, i++)
{
if (i == index)
{
return current;
}
}
return NULL; // The chain wasn't long enough
}

关于c - 获取结构深处的数据 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50006778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com