【发布时间】:2016-08-13 13:39:08
【问题描述】:
我有一个简单的结构,我想在堆上初始化并在函数中作为指针返回。
struct entry {
const char* const key; // We don't want the key modified in any way
const void* data; // But the pointer to data can change
struct entry* next;
};
有一个问题,我不能calloc它并一一初始化成员,因为key是一个const指针。我在某处发现了这种有效的语法:
struct entry* entry = calloc(1, sizeof(struct entry));
*entry = (struct entry) { .key = key, .data = data, .next = NULL };
但我不知道它发生了什么:它是否会创建一个“匿名”结构,然后将其复制到 *entry 所在的位置?使用它是否安全,或者我应该更喜欢创建一个本地结构,然后使用memcpy 复制到正确的位置?
【问题讨论】:
-
你确定这有效吗,因为它不应该。
entry的类型是什么? -
entry是struct entry*。我在问题中添加了声明部分。 -
正如我所怀疑的,它不会编译:ideone.com/2YIgUN
-
我刚刚注意到您还建议使用 memcpy,所以是的,这是正确的方法。 :-s
-
奇怪...用你的文件:
clang -std=c11 -Weverything -pedantic struct_test.c -o struct_test对我来说没有错误。
标签: c struct initialization heap-memory