结构体函数定义的问题
#include <stdio.h>#include <string.h>
struct student
{
int num;
char name;
float score;
};
void print(struct student);
void main()
{
struct student stu;
stu.num = 001;
strcpy(stu.name, "Fishc.com!");
stu.score = 95.5;
stu.score = 98.8;
stu.score = 93.2;
print( stu );
}
void print(struct student stu) //此处的函数为什么和之前声明的函数不一样呢,这里的stu之前为什么不用写呢???//
{
printf("\tNumber : %d\n", stu.num);
printf("\tName : %s\n", stu.name);
printf("\tScore : %5.2f\n", stu.score);
printf("\tScore : %5.2f\n", stu.score);
printf("\tScore : %5.2f\n\n", stu.score);
} 而最后函数中为什么又必须添加之前没有的stu变量呢 本帖最后由 baige 于 2020-8-8 01:03 编辑
声明时形参只需要给类型和数量就行参数名给不给无所谓,定义都要写上 本帖最后由 SHRS23 于 2020-8-8 01:09 编辑
下图来自《C程序设计语言 第二版》P19
下两图来自《C Primer Plus 第六版中文版》P249
回到你的问题
void print(struct student);
这一句是“声明带形参函数的原型”(对应9.1.5),只需要指明形参的个数和类型即可(一个,struct类型),不需要写出变量名(图一建议写出变量名起到说明性的作用)
void print(struct student stu)
{
/**/
}
这段是“定义带形参的函数”(对应9.1.4),注意图中红线部分,此时括号内实际上是在定义局部变量,所以必须要把类型和变量名写全。 这个print函数不是结构体的成员函数,只是一个普通的全局函数而已 本帖最后由 努力努力再努力a 于 2020-8-8 13:50 编辑
这个print函数里面的stu是一个形参。(main函数里面的stu是一个实参)
1.struct student 是你自己定义的内部类型,跟使用内置类型如char、int等一样,所以struct studentstu就相当于声明了一个struct student 类型的对象,它的值就是实参main里面的stu传来的;
2.函数声明可以不写形参,但是必须写形参类型,所以声明是void print(struct student)
3.函数定义必须写形参名称,也就是main里面实参传递过来的变量,这个变量名称可以随便取,比如取a ,void print(struct student a),这个a里面存放的内容跟main函数里stu一样,但是它在调用结束后就会被释放。 函数声明的时候只需要指定类型就可以了,不用必须写上变量
页:
[1]