我现在正在学习指针和结构,我有点困惑。特别是,我想制作一个返回指向结构的指针的函数。我的代码正在编译,但是没有用。输入学生数后,会要求输入姓名和年龄(无阅读名称),输入年龄后,它将关闭。
#include <stdio.h>
#include <stdlib.h>
struct details
{
char name[100];
int age;
};
struct details * details_pointer(int n)
{
struct details pointer_x[n];
struct details *pointer = pointer_x;
for (int i=0; i<n; i++)
{
printf("Student %d:\n", i);
printf("name:\n");
fgets(pointer[i].name, 100, stdin);
printf("age:\n");
scanf("%d", pointer[i]. age);
}
return pointer;
}
int main()
{
int n;
printf("Type the number of persons:\n");
scanf("%d", &n);
struct details *student = details_pointer(n);
printf("\nName: %s\n", (*student).name);
printf("Age: %d\n", (*student).age);
system("pause");
return 0;
}
好的,如果分配需要动态分配,那么这就是我们要做的。
仅指定一个数组即可在函数运行时隐式分配空间,但在函数返回时它将消失。您需要专门分配它。
重新检查您的代码:
struct details *details_pointer(int n)
{
struct details *students = (struct details *)malloc(n * sizeof(struct details));
.... do stuff with students[0] and the like
return students;
}
它使用malloc()
-内存分配-库函数为您提供一些空间,并且在您释放它之前一直保持有效。字节数是您想要的东西数()n
乘一件事中的字节数(sizeof(struct details)
)
后来:
int main()
{
struct details *student = details_pointer(n);
.. do stuff
free(student);
}
现在,它将使用该内存,并在完成后将其释放回操作系统。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句