结构作为参数传递,但不能正常工作
问题描述:
所以我正在使用嵌套结构和将结构作为参数传递给函数。结构作为参数传递,但不能正常工作
这里是我的主要功能:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct date {
int dd;
int mm;
int yy;
};
struct employee {
char fn[50];
char ln[50];
struct date dob;
struct date sd;
int salary;
};
void take_input(struct employee e);
void give_output(struct employee e);
int main(void)
{
struct employee a; struct employee b; struct employee c; struct employee d; struct employee f;
take_input(a);
take_input(b);
take_input(c);
take_input(d);
take_input(f);
give_output(a);
give_output(b);
give_output(c);
give_output(d);
give_output(f);
return 0;
}
而且这里有两个功能:
void take_input(struct employee e)
{
printf("\nFirst name: ");
gets(e.fn);
printf("\nLast name: ");
gets(e.ln);
printf("\nDate of Birth: ");
scanf("%d %d %d", &e.dob.dd, &e.dob.mm, &e.dob.yy);
printf("\nDate of Joining: ");
scanf("%d %d %d", &e.sd.dd, &e.sd.mm, &e.sd.yy);
printf("\nSalary: ");
scanf("%d", &e.salary);
}
void give_output(struct employee e)
{
printf("%s", e.fn);
printf(" %s", e.ln);
printf("\nDate of Birth: %d/%d/%d", e.dob.dd, e.dob.mm, e.dob.yy);
printf("\nStarting Date: %d/%d/%d", e.sd.dd, e.sd.mm, e.sd.yy);
printf("\nSalary: $%d\n", e.salary);
}
的问题是采取输入和存储数据不正常的功能。每次程序运行时都需要输入,但打印时会给出一些垃圾值。但是如果我在没有函数的情况下运行它(在main()函数下),它可以在相同的代码下正常工作。我似乎无法找出代码中的问题,所以任何帮助表示赞赏。
答
C使用按值传递函数参数传递。所以,当你调用函数一样
take_input(a);
的a
临时副本被传递给函数。无论您对被调用函数中的输入参数所做的任何更改,都不会对调用程序中存在的实际a
产生任何影响。
您需要传递结构变量的地址,并对被调用函数内部的变量进行更改。只有这样,所做的更改将反映回从调用函数传递的实际参数。
按价值传递大型结构也可能会造成严重的性能下降。 – tofro