c - 从用户那里获取#define 值

标签 c struct

当涉及结构时,如何从用户输入中获取#define 值而不是在代码中预先定义它。鉴于下面的代码,我想从用户那里获取值 N,是吗可能还是我应该尝试别的东西

#define N 4

// Data structure to store graph
struct Graph {
    // An array of pointers to Node to represent adjacency list
    struct Node* head[N];
};

最佳答案

这在您尝试执行的方式中是不可能的。您不能动态地(运行时)重新定义 C 中的类型。 一种替代方法是存储双指针并根据用户要求分配内存。

将图形结构更改为以下内容:

// Data structure to store graph
struct Graph {
    // A double pointer to Node to represent adjacency list
    struct Node** head;
};

现在,根据 N 的值,您可以动态分配所需的内存。

int N = 4;
Graph g;
g.head = malloc(sizeof(struct Node*) * N);

这里,N 同样可以是#define 或运行时设置的变量。您的其余代码可以保持不变。您可以继续使用 g.head[i] 来引用第 i 个元素,就像您有一个数组一样。

当然,不要忘记在完成后free()分配的内存,否则会发生泄漏!

关于c - 从用户那里获取#define 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57922262/

相关文章:

Ubuntu 下的 C - 尝试解决 "Wheel game"时未出现预期结果

objective-c - Obj-c 中访问先前定义的 C 结构数据的问题

c - 为什么我不能在 C 中初始化并声明指向 NULL 的指针?

c++ - 有什么办法可以反编译Linux .so?

c++ - 空结构和匿名 union 怪事

struct - Swift1.2 结构体初始化函数编译报错

c++ - static_cast 和 reinterpret_cast 有什么区别?

arrays - 在一个 slice 中解码 2 个不同的结构

c - 是否可以绕过多核处理器中的 L1 缓存

c - 多重声明中的第二个 int 是否始终设置为 1?