2017-04-05 93 views
0

大家好我创建创建一个结构的实例数组

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

我创建了创建此结构的新实例,并初始化使用随机值的属性,这样

功能下面的结构
struct Test* createNewTest(){ 
struct Test *NewInstance = (Test *)malloc(sizeof(Test)); 
NewInstance->value = rand(); 

现在我必须创建一个用于创建我的结构正完全初始化实例函数。

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

任何人都可以帮助我做到这一点?我真的不现在如何在这里

+0

欢迎来到Stack Overflow! [请参阅此讨论,为什么不在'C'中投射'malloc()'和family的返回值。](http://stackoverflow.com/q/605845/2173917)。 –

+2

'的sizeof(测试)' - >'的sizeof(结构测试)' –

+0

不知道你是想通过分配指针C_STRING随机数要达到什么,看起来不聪明。如果你想使用sizeof(Test),用typedef在你的结构前面添加名称并将其附加到结构中。 – SPlatten

回答

0

开始我将试图解释这一点没有给你回答你的任务逐字...

首先,您需要分配n倍多的内存。 malloc可以分配任何金额,所以你只需要计算数量。

其次,你需要做相同的初始化,但是对于数组中的每个条目。你需要一个循环。提示:在C语言中,指向单个实例的指针和指向动态数组的指针是不可区分的。 ptr->valueptr[0].value相同,并且ptr[1].value是数组中的下一个元素。

0

小例子:

#include <stdlib.h> 

#define RANDOM 'a' 

struct box { char content; }; 



// Array of n initialized `box`es 

struct box* new_array(int count) { 
    struct box* arr_ptr = malloc(sizeof (struct box) * count); 

    struct box* ptr = arr_ptr; 
    while (count --) { 
     ptr++ -> content = RANDOM; 
    } 

    return arr_ptr; 
} 



// Array of n pointers to initialized `box`es 

struct box* new_box(void) { 
    struct box* box_ptr = malloc(sizeof (struct box)); 
    box_ptr -> content = RANDOM; 
    return box_ptr; 
} 

struct box** new_ptr_arr(int count) { 
    struct box** arr_ptr = malloc(sizeof (struct box*) * count); 

    struct box** temp = arr_ptr; 
    while (count --) { 
     * temp++ = new_box(); 
    } 

    return arr_ptr; 
} 
+1

请阅读并理解[为什么不在C](/ q/605845)中输入'malloc()'和family的返回值的问题。 –

+0

@ toby-speight http://stackoverflow.com/a/1565552/7090469 – suchtgott

1

这是相当简单的。首先,你需要为n指针分配足够的存储空间来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的指针数组 - 您可能更适合使用一组Test对象。