gpt4 book ai didi

c - 在 C 中初始化可变大小的 bool 数组

转载 作者:太空狗 更新时间:2023-10-29 15:23:21 30 4
gpt4 key购买 nike

所以我目前有一个看起来像这样的结构:

typedef struct example {
bool arr[]; //i would like this to be an array of booleans,
//but i don't know the size right now; this is
//probably wrong
} example_t;

我还有一个看起来像这样的创建函数:

example_t *newExample(int SIZE){
example_t *example = malloc(sizeof(example_t));
//initialize arr to a bool array of size SIZE, ideally all false!
example->arr = ???
return example;
}

由此,我可以做类似的事情:

 example_t *example = newExample(MAX);
if ( example->arr[10] )
....

这在 C 中是否可能创建一个可变大小的 bool 数组?

供引用:我需要以某种方式将整数映射到 char*bool,这样我就可以调用 arr[ num] 并能够获取字符串/单词或真/假值。这两种方式,我都不确定如何声明,然后用可变大小进行初始化。提前致谢!

最佳答案

在 C99 中你可以使用 flexible array members其中最后一个成员可以是没有给定维度的数组,但 struct 中必须至少有 2 个成员。

您可以使用指针(为了简洁,我在这里使用 int 而不是 bool):

#include <stdlib.h>
#include <stdio.h>

typedef struct example {
int *arr;
} example_t;

static example_t *newExample(size_t SIZE)
{
example_t *example = malloc(sizeof(example_t) + sizeof(int) * SIZE);

example->arr = (int *)(example + 1);
example->arr[5] = 5;
return example;
}

int main(void)
{
example_t *x = newExample(10);

printf("%d\n", x->arr[5]);
free(x);
return 0;
}

但这没有多大意义,为什么不添加一个包含元素数量的第一个成员呢?

#include <stdlib.h>
#include <stdio.h>

typedef struct example {
size_t size;
int arr[];
} example_t;

static example_t *newExample(size_t SIZE)
{
example_t *example = malloc(sizeof(example_t) + sizeof(int) * SIZE);

example->size = SIZE;
example->arr[5] = 5;
return example;
}

int main(void)
{
example_t *x = newExample(10);

printf("%d\n", x->arr[5]);
free(x);
return 0;
}

使用此方法有一个优点:您可以将对象传递给任何函数,而无需传递额外的大小参数。

关于c - 在 C 中初始化可变大小的 bool 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44194514/

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