创建一个用于创建结构实例的Array

时间:2017-04-05 12:35:43

标签: c arrays struct instance

大家好,我得到了以下结构

struct Test
{
    unsigned char* c_string;
    unsigned int value;
};

我创建了一个函数,用于创建此结构的新实例,并使用随机值(如

)初始化属性
struct Test* createNewTest(){
struct Test *NewInstance = (Test * )malloc( sizeof(Test) );
NewInstance->value = rand();

现在我必须创建一个函数来创建我的struct的完全初始化的实例。

struct Test** createNewArray(unsigned int n){
};

任何人都可以帮我这样做吗?我现在不知道如何从这里开始

2 个答案:

答案 0 :(得分:1)

这很简单。首先,您需要为指向n的{​​{1}}指针分配足够的存储空间:

struct Test

然后使用您拥有的函数分配每个指针:

struct Test **array = malloc(n * sizeof *array);
if (!array) return array;

全部包装,你得到了

for (size_t i = 0;  i < n;  ++i)
    array[i] = createNewTest();

不要忘记编写匹配的struct Test **createNewArray(size_t n) { struct Test **array = malloc(n * sizeof *array); if (!array) return array; for (size_t i = 0; i < n; ++i) array[i] = createNewTest(); return array; } 函数!

另外,考虑一下你是否真的想要一个指向free()的指针数组 - 你可能会更好地使用一组Test个对象。

答案 1 :(得分:0)

我会试着解释一下,而不是逐字逐字地给你答案......

首先,您需要分配n倍的内存。 malloc可以分配任何金额,因此您只需要计算数字。

其次,您需要对数组中的每个条目执行相同的初始化。你需要一个循环。

提示:在C中,指向单个实例的指针和指向动态数组的指针是无法区分的。 ptr->valueptr[0].value相同,ptr[1].value是数组中的下一个元素。