大家好,我得到了以下结构
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){
};
任何人都可以帮我这样做吗?我现在不知道如何从这里开始
答案 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->value
与ptr[0].value
相同,ptr[1].value
是数组中的下一个元素。