如何在 C 中初始化结构体中的 const 变量?

发布于 2024-10-11 21:50:56 字数 318 浏览 5 评论 0原文

结构

struct Tree{
    struct Node *root;
    struct Node NIL_t;
    struct Node * const NIL;    //sentinel
}

我写了一个我想要的

struct Node * const NIL = &NIL_t;

,但无法在结构内初始化它。 我用的是msvs

我使用 C,而不是 C++。 我知道我可以在 C++ 中使用初始化列表。

在C中如何做到这一点?

I write a struct

struct Tree{
    struct Node *root;
    struct Node NIL_t;
    struct Node * const NIL;    //sentinel
}

I want

struct Node * const NIL = &NIL_t;

I can't initialize it inside the struct.
I'm using msvs.

I use C, NOT C++.
I know I can use initialization list in C++.

How to do so in C?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

空宴 2024-10-18 21:50:56

如果您使用的是 C99,则可以使用指定的初始值设定项来执行此操作:

struct Tree t = { .root = NULL, .NIL = &t.NIL_t };

但这仅适用于 C99。我已经在 gcc 上测试过它,它似乎工作得很好。

If you are using C99, you can used designated initializers to do this:

struct Tree t = { .root = NULL, .NIL = &t.NIL_t };

This only works in C99, though. I've tested this on gcc and it seems to work just fine.

蓦然回首 2024-10-18 21:50:56

对于那些寻求简单示例的人,如下所示:

#include <stdio.h>

typedef struct {
    const int a;
    const int b;
} my_t;

int main() {
   my_t s = { .a = 10, .b = 20 };
   printf("{ a: %d, b: %d }", s.a, s.b);
}

产生以下输出:

{ a: 10, b: 20 }

For those seeking a simple example, here it goes:

#include <stdio.h>

typedef struct {
    const int a;
    const int b;
} my_t;

int main() {
   my_t s = { .a = 10, .b = 20 };
   printf("{ a: %d, b: %d }", s.a, s.b);
}

Produces the following output:

{ a: 10, b: 20 }
挽手叙旧 2024-10-18 21:50:56

结构定义了数据模板,但本身没有数据。由于它没有数据,因此无法对其进行初始化。

另一方面,如果您想声明一个实例,则可以对其进行初始化。

struct Tree t = { NULL, NULL, NULL };

A structure defines a data template but has no data itself. Since it has no data, there's no way to initialize it.

On the other hand, if you want to declare an instance, you can initialize that.

struct Tree t = { NULL, NULL, NULL };
禾厶谷欠 2024-10-18 21:50:56

也许这样的东西就足够了?

struct {
    struct Node * const NIL;
    struct Node *root;
    struct Node NIL_t;
 } Tree = {&Tree.NIL_t};

Maybe something like this will suffice?

struct {
    struct Node * const NIL;
    struct Node *root;
    struct Node NIL_t;
 } Tree = {&Tree.NIL_t};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文