gpt4 book ai didi

通过宏创建数组

转载 作者:行者123 更新时间:2023-11-30 17:37:24 25 4
gpt4 key购买 nike

我有学校作业,即将完成,但我注意到规范中的一些细节,但我不知道该怎么做。

规范如下:为位数组定义这些宏:

BitArray(数组名称, 大小)

//定义并取消位域。您必须将其设置为本地/自动。 (不确定翻译是否正确,我找不到太多关于“自动”字段的信息...)我理解它,因为我必须制作这样的宏(我不能使用动态内存(malloc)):

#define BitArray(arrayname,size) unsigned long bits[size+some operations]

typedef BitArray_t

我的问题来了,因为我们必须使用新类型,它在所有其他函数中用于传递位数组。我不知道如何在头文件中定义它。当我这样走时:

Headerfile.h
typedef unsigned long *bits; //

//We also have to storage size of the bit array. So I can either put it in 0th array element, or make struct (there came even more problems)

#define SetBit(array, index, value)\
{\
...\
1 << position & array[2];\ // PROBLEM
...\
}

这里有问题。它告诉我我比较了两种不同的类型。如果我放 *array,它当然可以工作,但我没有想要创建指针数组,我相信我只是做错了什么。是否可以创建我的 typedef 数组而不必每次都遵循它?我不确定我是否写清楚了,但我希望你至少能理解我一点。

最佳答案

我会使用一个结构体作为位数组

typedef struct {
unsigned int size,
unsigned long bits[];
} BitArray_t;

我在堆栈上初始化它的方式如下

#define BITS_PER_BYTE 8

unsigned int size = 1024;

/* add 1 here in case the size is not evenly divisible by number of bits
in unsigned long */
unsigned int bit_arr_size = (size / sizeof(unsigned long) / BITS_PER_BYTE) + 1;

unsigned int bits[bit_arr_size] = {0}; /* this initializes the entire array */

/* Name of the struct is going to be a_bitarray */
/* struct initialization */
BitArray_t a_bitarray = { .size = bit_arr_size, .bits = bits };

将其转换为宏

#define BitArray(arrayname, size) \
unsigned int bit_arr_size = ((size) / sizeof(unsigned long) / 8) + 1; \
unsigned int bits[bit_arr_size] = {0}; /* this initializes the entire array */ \
BitArray_t arrayname = { .size = bit_arr_size, .bits = bits };

关于通过宏创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22412256/

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