鱼C论坛

 找回密码
 立即注册
查看: 1640|回复: 6

结构体函数定义的问题

[复制链接]
发表于 2020-8-7 23:33:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <string.h>

struct student
{
        int num;
        char name[20];
        float score[3];
};

void print(struct student);                          

void main()
{

        struct student stu;
       

        stu.num = 001;
        strcpy(stu.name, "Fishc.com!");
        stu.score[0] = 95.5;
        stu.score[1] = 98.8;
        stu.score[2] = 93.2;
       
        print( stu );

}

void print(struct student stu)                            //此处的函数为什么和之前声明的函数不一样呢,这里的stu之前为什么不用写呢???//
{
        printf("\tNumber   : %d\n", stu.num);
        printf("\tName     : %s\n", stu.name);
        printf("\tScore[0] : %5.2f\n", stu.score[0]);
        printf("\tScore[1] : %5.2f\n", stu.score[1]);
        printf("\tScore[2] : %5.2f\n\n", stu.score[2]);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-7 23:35:00 | 显示全部楼层
而最后函数中为什么又必须添加之前没有的stu变量呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 23:38:45 | 显示全部楼层
本帖最后由 baige 于 2020-8-8 01:03 编辑

声明时形参只需要给类型和数量就行参数名给不给无所谓,定义都要写上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-8 01:00:36 | 显示全部楼层
本帖最后由 SHRS23 于 2020-8-8 01:09 编辑

下图来自《C程序设计语言 第二版》P19
2020-08-08_005338.png

下两图来自《C Primer Plus 第六版中文版》P249
2020-08-08_010652.png
2020-08-08_005840.png


回到你的问题
void print(struct student);  
这一句是“声明带形参函数的原型”(对应9.1.5),只需要指明形参的个数和类型即可(一个,struct类型),不需要写出变量名(图一建议写出变量名起到说明性的作用)

void print(struct student stu)   
{
  /**/
}
这段是“定义带形参的函数”(对应9.1.4),注意图中红线部分,此时括号内实际上是在定义局部变量,所以必须要把类型和变量名写全。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-8 11:59:12 | 显示全部楼层
这个print函数不是结构体的成员函数,只是一个普通的全局函数而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-8 13:48:51 | 显示全部楼层
本帖最后由 努力努力再努力a 于 2020-8-8 13:50 编辑

这个print函数里面的stu是一个形参。(main函数里面的stu是一个实参)
1.struct student 是你自己定义的内部类型,跟使用内置类型如char、int等一样,所以struct student  stu就相当于声明了一个struct student 类型的对象,它的值就是实参main里面的stu传来的;
2.函数声明可以不写形参,但是必须写形参类型,所以声明是void print(struct student)
3.函数定义必须写形参名称,也就是main里面实参传递过来的变量,这个变量名称可以随便取,比如取a ,void print(struct student a)  ,这个a里面存放的内容跟main函数里stu一样,但是它在调用结束后就会被释放。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-25 22:28:36 | 显示全部楼层
函数声明的时候只需要指定类型就可以了,不用必须写上变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 23:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表