嗨朋友我正在练习结构。我有这两个函数返回结构,我将它复制到main中的本地结构。我的第二个函数通过输入不同的实体来更改这些本地struct成员 现在我在调用每个函数后打印结果,令我惊讶的是我注意到两个函数之后的打印结果是一样的。我无法理解这里发生的事情......你们能解释一下......谢谢!
#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);
}
答案 0 :(得分:7)
你的意思是写
void read_student_p(struct student* student3)
^
{
read_student_p(&student1);
^
如果要修改要传递的read_student_p
,则需要将指针传递给struct
。目前它按值传递,修改丢失。
考虑到_p
后缀,我希望这是为了......
答案 1 :(得分:0)
执行此操作时:
read_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_student_p所做的就是获取你传入的结构的副本(student1),编辑副本,然后什么都不做。
一种解决方案是返回结构的更改版本。另一个版本是传递指向结构的指针,并通过指针编辑结构(以便您直接编辑结构的相同副本)。
答案 2 :(得分:0)
在第二个函数read_student_p
中,您按值调用,也就是说,您在函数中定义了一个新的结构变量tmp
,并将student1
的值复制到此tmp值。您所做的所有修改都是在tmp值上进行的,这不会影响student1
。