gpt4 book ai didi

c - 从结构中的指针访问结构的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:26 25 4
gpt4 key购买 nike

我将尽量保持简短。所以我有两个结构:

typedef struct someStruct named;
struct someStruct {
void *key;
void *value;
};
typedef struct anotherStruct namedToo;
struct anotherStruct {
named **table;
unsigned int size;
};

好的,现在忽略上面任何可能的错误,这是不可编辑的代码。

现在我有两种方法:

namedToo *init(float ignoreThis) {
namedToo *temp;
temp = malloc(sizeof(namedToo)); //some memory for the second struct
temp->table = malloc(sizeof(named)*100); //lets say this 100 is for 100 buckets/cells/named elements
return temp;

方法二:

int insert(namedToo *temp, void* key, void* value) {
temp->table[0]->key = key; //My problem, I need to access the value and key inside named from the pointer inside namedToo. How can I do this?
}

评论有我的问题:我的问题是,我需要从 namedToo 中的指针访问 named 中的值和键。我怎样才能做到这一点?我需要不时自己更改和获取值/ key 。

最佳答案

声明 named **table; 表示 table 是指向 named 的指针,或者是指向 的指针数组>命名。后者似乎是您想要的。

这个分配:

temp->table = malloc(sizeof(named)*100); 

为 100 个 named 分配空间,但是你需要的是 100 个 named *,并且每个都必须指向一个 named。考虑到 named 的定义,这可能是足够的空间,但是此时您有一个未初始化指针数组。尝试访问它们会导致 undefined behavior ,在本例中表现为核心转储。

您需要为指针数组分配空间,然后将每个指针初始化为 named 的单个动态分配实例。所以你应该像这样分配空间:

int i;
temp->table = malloc(sizeof(named *)*100);
for (i=0; i<100; i++) {
temp->table[i] = malloc(sizeof(named));
}

那么您的insert 方法应该可以正常工作。

关于c - 从结构中的指针访问结构的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39397248/

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