指针数组结构(array of pointers to structures)

2019-07-30 12:13发布

我想知道如果我的代码是正确的。 我需要声明指针数组结构,创建一个新的结构和分配值,并打印出来。 在我看来,我不是正确的声明指针数组。 我需要知道我在做什么错。 谢谢我得到这个编译错误:错误:“人”未申报(第一次在这个函数中使用),而且我试图插入结构数据*列表; 入主但它wouldnt工作

     char *book[] = { "x", "y", "z",};
     int number[] = { 1, 2, 3};

     struct data = { char *bookname; int booknumber;};

     function(char *x, int y)
     {
       static int count;

       struct data *list[3];

       //creating a new struct 
       list[count] = (struct data*) malloc( sizeof(struct data) );

       //assigning arguments
       list->bookname = x;
       list->booknumber = y;

       count++;
     }

     int main()
     {
       struct data *list[3];

       int i;
       for(i = 0; i < 3; i++)
       {
         function(book[i], number[i]);

         printf("name: %c number: %d", list[i]->bookname, list[i]->booknumber);
       }

Answer 1:

请更改下面的代码段

    // declaring array of pointers to structs //         
     struct data *list;         
    //not compiling        
    //struct data *list[3]; ---> There is no problem with this statement.        
   //creating a new struct         
   list = (struct data*) malloc( sizeof(struct data) );  ---> //This statement should compilation error due to declaration of struct data *list[3]

struct data *list[100]; //Declare a array of pointer to structures  
//allocate memory for each element in the array
list[count] = (struct data*) malloc( sizeof(struct data) ); 


Answer 2:

既然你想数组,你需要声明数组:

char *book[] = { "x", "y", "z",};
int number[] = { 1, 2, 3};

另一个问题是

list = (struct data*) malloc( sizeof(struct data) );

//assigning arguments
list[count]->bookname = ...

在这里, list总是将有一个元素。 所以,如果count比其他任何0 ,您将访问数组越界!



Answer 3:

我想你应该写:

char *book[] = { "x", "y", "z"};

因为在你的情况进行了声明字符数组和使用指针,这实际上是没有意义的填充它。

在上面的代码行,它只是意味着“声明指针数组”。

希望它帮助...



Answer 4:

这些事情是错误在你的程序

struct data = { char *bookname; int booknumber;};

“=”应该不应该存在

list = (struct data*) malloc( sizeof(struct data) );
list[count]->bookname = x;
list[count]->booknumber = y;

在这里,你正在创建一个列表的空间,所以你不能做单[统计] - > BOOKNAME,它应该是列表 - > BOOKNAME。 同样的,booknumber
和列表是本地的功能,你不能在主访问它。



文章来源: array of pointers to structures
标签: c structure