struct类型声明的疑问

如果struct类型的声明放在函数体内,比如下面这个程序:

#include<stdio.h>
#define N 5

 

int main()
{
struct Student *input(struct Student *p);
struct Student
{
int num;
char name[10];
float score[3];
};
struct Student stu[N],*s=stu;
s=input(stu);
return 0;
}

struct Student *input(struct Student *p)
{
}

编译时在引用input函数行出现错误:“Student *类型的实参与Student *类型的形参不兼容“,

这个错误的原因可解释为struct类型的声明在input函数的声明之后,函数无法对实参、形参进行匹配。

但如果把struct类型声明放在input函数声明之前(仍然在main函数内),则会在input函数声明行出现错误:

”使用局部类型声明的 函数“input”必须在此翻译单元中定义“。

这个错误出现的原因就无法解释了。

当然,struct类型的声明放在主函数之前就没有任何错误。

posted @ 2012-05-24 09:50  不堪一喵  阅读(685)  评论(0编辑  收藏  举报