C 如何更改传递给函数的结构的值
嗨,朋友们,我正在练习结构。我有两个函数,一个返回结构,我将其复制到main中的本地结构。我的第二个函数通过输入不同的实体来更改这些本地结构成员。 现在我已经打印了调用每个函数后的结果,令我惊讶的是,我注意到两个函数后的打印结果是相同的。我无法理解这里发生了什么…你们能给我解释一下吗…谢谢C 如何更改传递给函数的结构的值,c,C,嗨,朋友们,我正在练习结构。我有两个函数,一个返回结构,我将其复制到main中的本地结构。我的第二个函数通过输入不同的实体来更改这些本地结构成员。 现在我已经打印了调用每个函数后的结果,令我惊讶的是,我注意到两个函数后的打印结果是相同的。我无法理解这里发生了什么…你们能给我解释一下吗…谢谢 #include <stdio.h> #include <stdlib.h> struct student{ char name[30]; fl
#include <stdio.h>
#include <stdlib.h>
struct student{
char name[30];
float marks;
};
struct student read_student();
void read_student_p(struct student student3);
void print_student(struct student student2);
int main()
{
struct student student1;
student1 = read_student();
print_student(student1);
read_student_p(student1);
print_student(student1);
system("pause");
return 0;
}
//This is my first function
struct student read_student()
{
struct student student2;
printf("enter student name for first function: \n");
scanf("%s",&student2.name);
printf("enter student marks for first function:\n");
scanf("%f",&student2.marks);
return student2;
}
//function to print
void print_student(struct student my_student)
{
printf("Student name in first function is : %s\n",my_student.name);
printf("Student marks in first function are: %f\n",my_student.marks);
};
//My second function
void read_student_p(struct student student3)
{
printf("enter student name for second function: \n");
scanf("%s",&student3.name);
printf("enter student marks for second function: \n");
scanf("%f",&student3.marks);
}
#包括
#包括
结构学生{
字符名[30];
浮标;
};
struct student read_student();
无效阅读学生(结构学生3);
无效打印学生(结构学生2);
int main()
{
结构学生1;
student1=读学生();
印刷大学学生(学生1);
阅读(学生1);
印刷大学学生(学生1);
系统(“暂停”);
返回0;
}
//这是我的第一个函数
struct student read_student()
{
结构学生2;
printf(“为第一个函数输入学生姓名:\n”);
scanf(“%s”和student2.name);
printf(“为第一个函数输入学生分数:\n”);
scanf(“%f”和student2.marks);
返回学生2;
}
//打印函数
无效打印学生(结构学生我的学生)
{
printf(“第一个函数中的学生名是:%s\n”,我的学生名);
printf(“第一个函数中的学生分数是:%f\n”,my_Student.marks);
};
//我的第二个功能
无效读取学生(结构学生3)
{
printf(“为第二个函数输入学生姓名:\n”);
scanf(“%s”和student3.name);
printf(“为第二个函数输入学生分数:\n”);
scanf(“%f”和student3.marks);
}
你想写什么
void read_student_p(struct student* student3)
^
{
read_student_p(&student1);
^
如果要修改要传递的结构
,则需要传递指向read\u student\p
的指针。目前它是按值传递的,修改将丢失
考虑到\u p
后缀,我认为这是您这样做的目的。:
read\u student\p(student1)代码>
方法如下所示:
void read_student_p(struct student student3)
{
printf("enter student name for second function: \n");
scanf("%s",&student3.name);
printf("enter student marks for second function: \n");
scanf("%f",&student3.marks);
}
C中的结构是通过值传递的,而不是通过引用传递的
所以read\u student\p所做的就是复制一个你传入的结构(student1),编辑这个副本,然后什么也不做
一种解决方案是返回结构的更改版本。另一个版本是将指针传递到结构,然后通过指针编辑结构(这样您就可以直接编辑结构的同一副本)。在第二个函数中,您通过值调用了read\u student\p
,也就是说,您在函数中定义了一个新的结构变量tmp
,并将student1
的值复制到此tmp值。您所做的所有修改都是在tmp值上进行的,这不会影响student1
会发生什么,您希望会发生什么?即使在调用第二个函数后,它也会打印相同的名称和标记…您可以看到,在第二个函数中,我们再次输入新名称和新标记…我希望它会打印出来