将结构数组传递给具有malloc的函数
我正在编写一个程序,需要将学生添加到结构数组中 首先,我有以下结构数组:将结构数组传递给具有malloc的函数,c,arrays,struct,C,Arrays,Struct,我正在编写一个程序,需要将学生添加到结构数组中 首先,我有以下结构数组: struct student *students[4]; 在声明之后,我将这样的学生添加到数组中(只是为了有示例…): 现在我必须编写一个附加函数,在这里我可以将数组作为参数传递,并添加一个新的student 我的函数如下所示: void add_student(struct student *students[],char *fristname, char *secondname, long number) {
struct student *students[4];
在声明之后,我将这样的学生添加到数组中(只是为了有示例…):
现在我必须编写一个附加函数,在这里我可以将数组作为参数传递,并添加一个新的student
我的函数如下所示:
void add_student(struct student *students[],char *fristname, char *secondname, long number)
{
int i=0;
int new_position=0;
int return_value = 0;
// Search for the first available position for a new student
for(i=0; i<sizeof(students); i++)
{
if(students[i]==NULL)
{
new_position=i;
return_value = 1;
break;
}
}
struct student *new_student = malloc(sizeof(struct student));
students[new_position] = new_student;
students[new_position]->fristname = fristname;
students[new_position]->secondname = secondname;
students[new_position]->number = number;
return return_value;
}
void add_student(struct student *students[], int arr_size, char *firstname, char *secondname, long number)
但是现在我的问题:在我的“add_student”函数中,我得到一个数组,它有一个奇怪的结构:它将自身作为第一个元素,其他元素每移动一个元素
我想不出是什么问题。。。有人能帮忙吗
编辑:有人问我,这怎么可能。数组如何将“自身”作为第一个元素
下面是调试器(xCode)的屏幕截图:
在输入“添加学生”之前:
在“添加学生”功能中输入“添加学生”->后:
如你所见,“学生”现在有5个元素 将数组的长度传递给函数并更改此值
for(i=0; i<sizeof(students); i++)
<代码> >(i=0;i)静态分配数组有点奇怪,但动态地分配各个结构。您可以考虑动态分配它们:
int num_students = 4;
struct student **students = malloc(sizeof(struct student) * num_students);
然后将add_student
函数更改为如下所示:
void add_student(struct student *students[],char *fristname, char *secondname, long number)
{
int i=0;
int new_position=0;
int return_value = 0;
// Search for the first available position for a new student
for(i=0; i<sizeof(students); i++)
{
if(students[i]==NULL)
{
new_position=i;
return_value = 1;
break;
}
}
struct student *new_student = malloc(sizeof(struct student));
students[new_position] = new_student;
students[new_position]->fristname = fristname;
students[new_position]->secondname = secondname;
students[new_position]->number = number;
return return_value;
}
void add_student(struct student *students[], int arr_size, char *firstname, char *secondname, long number)
i请注意,与您的声明相反,您在代码中不提供结构数组。这将是一个元素为结构的数组(这是允许的)。相反,您提供一个指针数组(指向结构)。注意:void add_student(…){…return_value;}
是一个问题。void
函数不返回值。@chux是的,对不起,我知道这只是由“复制粘贴”和英语翻译引起的:)问题:sizeof(学生)只是他/她的机器上指针的大小吗,因为students
在这个范围内只不过是一个指针。@mah:yes,在答案中添加了。我已经添加了数组长度作为参数。但我仍然有一个问题,即传递的数组以某种方式将自身包含为第一个元素。@MaxLebold:你说的“数组将自身包含为第一个元素”是什么意思?你是否考虑过如果学生在数组中没有可用的位置会发生什么?
void add_student(struct student *students[], int arr_size, char *firstname, char *secondname, long number)