C语言结构体问题

发布网友

我来回答

2个回答

热心网友

实参才拥有内存,形参是不分配内存的
在调用函数时,一般传递的是对象实例的一个地址
所以这里
定义的结构体变量 struct student stu
stu才占有系统资源
而print(stu)函数在未被调用的时候是不分配任何内存的
而调用的print(struct student stu)时 传递进来的是stu的一个拷贝, 它和原来的stu有相同属性
对于输出函数来说,这样的操作可能不影响输出结果
其实建议参数定义成print(struct student &stu)的形式,因为假如你在函数内有赋值语句或者其他操作的话,才会对实例有效
意思就是,参数里的stu 是另外一个对象,这个对象是复制了你定义的stu对象,
就像一个人被克隆了一样,这个克隆人并不是原来那个人,所以这个克隆人的生老病死都不会影响原来的这个人
如果还不理解的话 我可以写一段代码给你看看:
#include <stdio.h>
struct student
{
int sno;
};
void print(student stu,int n)
{
stu.sno=n;
};
void main()
{
void print(student stu,int n);
student stu;
stu.sno=10;
print(stu,1);
printf("%d\n",stu.sno);
}
你觉得这个时候程序输出是多少?
应该是10 . 这就印证了我说的,形参实例在传递时候,传递进去的只是一个拷贝

但是假如将print() 函数改成这样定义void print(student &stu,int n)
输出就是1 ,这是传递的就是stu这个对象实例
以上回答你满意么?

热心网友

付费内容限时免费查看回答先定义一个结构体Student,它包含四个成员:学号(number)、姓名(name)、电话(telphone)、地址(address),然后定义一个结构体数组stu[3],输入3个学生的数据,再输出。运行结果如下图所示,请编程实现相应功能。

我的程序如下:(想修改一下用stu[3]定义,不知道怎么定义,用的是student1,student2,student3) 求指点。。

#includevoid main()

{struct student

{int number;

char name[20];

int telphone;

char address[20];

}student1,student2,student3;

printf("请输入第1个学生的信息:\n");

scanf("%d%s%d%s",&student1.number,student1.name,&student1.telphone,student1.address);

printf("\n");

printf("请输入第2个学生的信息:\n");

scanf("%d%s%d%s",&student2.number,student2.name,&student2.telphone,student2.address);

printf("\n");

printf("请输入第3个学生的信息:\n");

scanf("%d%s%d%s",&student3.number,student3.name,&student3.telphone,student3.address);

printf("\n");

printf("学生信息如下:\n");

printf("student num:%d name:%s telphone:%d address:%s \n",student1.number,student1.name,student1.telphone,student1.address);

printf("student num:%d name:%s telphone:%d address:%s \n",student2.number,student2.name,student2.telphone,student2.address);

printf("student

希望可以帮到你

提问学生的信息要连续输入如

1 Li 99

2 Shi 78

3 Wei 92

这样子呢?

回答scanf("%d",&stu[count].id)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com