c语言结构体做函数参数的问题

2024-11-07 13:55:03
推荐回答(5个)
回答1:

结构这么定义吧:
typedef struct student{
int num;
char name[50];
float s1;
float s2;
floats3;
}student,*pStu;
你原来那么定义只能存一个字符的姓名。

比如在main中,你可以定义一个struct student的数组。
pStu a = (pStu)malloc(5*sizeof(student));
然后传入指针

然后函数可以写为
int input(pStu &ss, int length)//这里length是ss的长度,防止内存溢出。
int avag(pStu &ss, int length)

下面是我写的input和main.你看一下吧。
#include

typedef struct student{
int num;
char name[50];
float s1;
float s2;
float s3;
}student,*pStu;

int input(pStu &ss, int length)
{
int i = 0;
while ( i < length )
{
printf("请输入学生%d的学号:",i);
scanf("%d",&(ss->num));
printf("请输入学生%d的姓名:",i);
scanf("%s",&(ss->name));
printf("请输入学生%d的第1门成绩:",i);
scanf("%f",&(ss->s1));
printf("请输入学生%d的第2门成绩:",i);
scanf("%f",&(ss->s2));
printf("请输入学生%d的第3门成绩:",i);
scanf("%f",&(ss->s3));
printf("学生%d的 学号%d 姓名%s 第1门成绩%f 第2门成绩%f 第3门成绩%f\n",
i, ss->num,ss->name,ss->s1,ss->s2,ss->s3);
i++;
}
return 0;
}

int main(int argc,char** argv)
{
int count;
printf("输入学生数:");
scanf("%d",&count);
if ( count<=0 )
{
printf("数量错误!!\n");
return -1;
}
pStu a = (pStu)malloc(count*sizeof(student));
if ( a == NULL )
return -1;
input( a, count );
return 0;
}

回答2:

1、结构体做函数参数仍然是以形参传入。相当于重新拷贝了一个结构体传入函数进行操作。
2、参数的传入分为两种形式:值传递和地址传递。如果把实例本身作为参数传到函数里面去,那么在函数里面实际上是另外产生一个临时的实例,其值和函数外部的那个实例一样,当然在函数内部对其做的一些改动是不会影响到外边的实例的,因为就不是同一个东西。当然如果在函数里不是想去改变什么而只是单纯的计算一些东西还是没问题的,不过在内存中的地址之类的当然是不一样的。传指针也就是把地址传进去,那么在函数里对该地址中的数据进行操作,当然就是在外部实例本身上面进行修改了。

回答3:

void input(struct student *stu_ptr) {
...
}

double avag(struct student *stu_ptr) {
return str_ptr->s1 + ...;
}

...
struct student stu;
input(&stu);
...
// 呃,name居然只是一个char....
printf("%c 的总分为: %lf\n", stu.name, avag(&stu) );

回答4:

struct student stu[5];//定义结构变量
void avag()
{
int i,sum=0;
for(i=0;i<5;i++)
{
sum=stu[i].s1+stu[i].s2+stu[i].s3
}
printf......;//输出5个学生的总成绩。
}
void main()
{
int i
printf.....;//输入学号、姓名、及成绩。
for(i=0;i<5;i++)
{
scanf.....;
}
avag();//调用自定义函数。
}

回答5:

当然可以了,首先定义一个RGBColor结构体
typedef
struct
{
char
r;
char
g;
char
b;
}
RGBColor;
然后定义一个结构体变量
RGBColor
color;
然后定义一个函数给color中的三个变量都赋值如:
void
test(int
a,int
b,int
c)
{
color.r=a;
color.g=b;
color.b=c;
}