#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,他应该询问姓名,年龄。
插入后,他应该打印,但是为了快速,我会尝试使用数组(结构)的第一个元素(索引)。
答案 0 :(得分:3)
您无法从函数返回整个数组,但您可以返回数组的基本位置。例如,您可以这样做:person *insert(int *sz);
。但是我在你的代码中看到你将&p
和&num
变量传递给insert方法,也许你想在那个函数中修改它们,然后在main()中对它进行操作。为此我会有这些建议:
person p
更改为person *p
。因为p应该保持数组的基值。记住数组名称只是列表第一个元素的基址。person**
而不是person*
。由于您要修改指针变量,因此您需要指向指针变量的指针。像这样改变:`void insert(person ** p,int * num)free(p)
。`