如何通过引用返回结构数组?

时间:2017-04-25 16:25:56

标签: c arrays struct reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct data{
    char name[20];
    char lastname[25];
    int age;
}person;

void insert(person *p,int *num);
int main()
{
    int num;
    person p;
    insert(&p,&num);
    printf("Name: %s",p[0].nome); /* Here i would print the first struct by 
     my array, but: is not array or not pointer Why?? */


}

void insert(person *p, int *num)
{
    int dim;
    person *arr;
    printf("Insert how many people do you want? ");  /* How many index the 
    array should have */
    scanf("%d",&dim);
    arr = (person *) malloc(dim*sizeof(person));   /* I'm not sure for 
    this explicit cast. */

for(int i = 0; i < dim; i++)
{
    printf("Insert name: ");
    scanf("%s",arr[i].name);
    printf("Insert lastname: ");
    scanf("%s",arr[i].lastname);
    printf("Insert age:': ");
    scanf("%d",&arr[i].age);
}
*num = dim;
*p = *arr;
}

我尝试过:`person * insert(int * num)

它的工作原理,但如何传递数组引用?`

这个程序应该询问你想插入多少人(在功能插入中)和一个for,他应该询问姓名,年龄。

插入后,他应该打印,但是为了快速,我会尝试使用数组(结构)的第一个元素(索引)。

1 个答案:

答案 0 :(得分:3)

您无法从函数返回整个数组,但您可以返回数组的基本位置。例如,您可以这样做:person *insert(int *sz);。但是我在你的代码中看到你将&p&num变量传递给insert方法,也许你想在那个函数中修改它们,然后在main()中对它进行操作。为此我会有这些建议:

  1. 将第16行person p更改为person *p。因为p应该保持数组的基值。记住数组名称只是列表第一个元素的基址。
  2. 更改您的功能定义以接收person**而不是person*。由于您要修改指针变量,因此您需要指向指针变量的指针。像这样改变:`void insert(person ** p,int * num)
  3. 使用后释放内存;在main的末尾添加free(p)
  4. `