c - 结构中可变大小的自引用

标签 c struct

我正在尝试实现需要这样结构的东西:

struct abc
{  
  int size;
  struct abc *links[size];
}

在这里,我希望 size 在运行时改变,而不仅仅是 abc 的每个实例不同,而且 abc 的实例有不同数量的链接取决于程序。如何为这样的数据结构创建/管理/分配内存?在 C 中甚至可能吗?

最佳答案

最简单的方法是像这样更改结构:

struct abc
{  
  int size;
  struct abc **links;
}

并动态调用数组:

abc.links = (struct abc **)calloc(abc.size, sizeof(void *));

然后你可以这样处理链接数组的元素:

struct abc a,b,c, ...;
int n;
...
a.links = (struct abc **)calloc(a.size, sizeof(void *);
a.links[n] = &b;
struct abc *z = a.links[n];

注意不要尝试访问调用数组边界之外的元素,否则您将遇到内存异常和意外行为。还要记住为每个分配的结构释放(abc.links)以防止内存泄漏......

希望对你有帮助

关于c - 结构中可变大小的自引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596148/

相关文章:

c - Linux内核中使用AES加密解密

c++ - 变量具有初始值设定项但类型不完整 C++

c - 使用 Newlib 实现 write()、_write() 或 _write_r()?

c++ - 如何从另一个 C++ 类访问一个结构?

c++ - 在 C++ 中按文件填充数组或结构

c - 无效的初始化程序 - 结构数组

inheritance - 如何在golang中嵌入其他包的结构

c - 对简单算术序列求和的 Rust 代码应用了哪些优化技术?

c++ - 快速傅里叶变换

c - 奇怪的(对我来说)函数声明