void student_info(char *name, int *hw1, int *hw2, int *hw3, int *ex1, int *ex2)
{
printf("Please enter the student's name:\n");
gets_s(name, 20);
printf("\nPlease enter the student's homework grades:\n");
scanf("%d %d %d", & (*hw1), & (*hw2), & (*hw3) );
printf("\nPlease enter the student's exam scores:\n");
scanf("%d %d", & (*ex1) , & (*ex2) );
}
答案 0 :(得分:1)
首先,根据您发布的代码,该代码是C,而不是C#。它可能是C ++,只要你以“C”风格使用它。
其次,& *没什么。如果您通过带有'*'的指针访问内存中的对象(术语更广泛的对象),然后获取指向先前访问过的对象的指针......您基本上什么也没做。可能混淆的原因是scanf()
中的变量通常前面带有'&',但如果您已经传递指针,则不需要这样做。
最后,没有足够的信息来评估程序崩溃的原因。你正在向这个函数传递六个指针,也许其中一个指向无效的内存(以前没有保留的内存或者不属于现有对象的内存)。
这是调用函数的正确方法:
char name[80];
int hw1;
int hw2;
int hw3;
int ex1;
int ex2;
student_info(name, &hw1, &hw2, &hw3, &ex1, &ex2);
这是一种调用函数的错误方法:
char * name;
int * hw1;
int * hw2;
int * hw3;
int * ex1;
int * ex2;
student_info(name, hw1, hw2, hw3, ex1, ex2);
这里有多种可能性,太多无法进一步发展。
希望这有帮助。