重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
形参要加上结构体名;与声明一个结构体数组一样
10年积累的成都做网站、网站制作、成都外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计制作后付款的网站建设流程,更有榆次免费网站建设让你可以放心的选择与我们合作。
即 show(struct 结构体名 数组名[]);
这样写是不可以的。
应该这么声明:
void days(struct student * judget)
{
//省略
}
struct student s;
s.year = year;
s.month = month;
s.day = day;
days(s);//这么使用
但是我不明白为什么结构体的名称是student啊,这个和学生没有关系,应该起个相关的名称,如time之类的,呵呵
代码不全。
是这样的,和参数无关,C语言存在类型的隐式转换,比如说一个short可以被当作一个int,而无需额外的转换,但是相反就不行。
隐式转换方便了开发者编码,但是它的限制同样为了防止你无心犯错。
好比你用大碗盛小碗的食物,编译器不用让你确认,自己就做了。但是你用小碗装大碗的食物,那么编译器提醒你,如果大碗的东西太多,可能会出错。那么你需要写清楚,表示你知道这么回事,它才接受。
fun函数的第二个参数之所以用指针,就是为了能把函数里面对这个参数做的改动保存下来
而你如果把*s=a[p];改成s=a[p];效果相当于,改了s的值,使其不再指向参数(函数
外部变量
m)的地址,虽然*s的值是正确的,但实际m的值则没有改变,所以在外面输出的时候,结果和预期不一致了
s=a[p];这个操作本身没有问题
C语言中,所有的变量都存储在内存中,可以通过运算符获得变量的内存地址,函数调用时,只需要把普通变量前加上符号,就可以达到传递变量地址的目的。
例如:
定义一个结构体类型
struct Yearmonthday
{
int year, month, day;
};
定义相关函数,参数类型指定为结构体类型指针
void input(struct Yearmonthday *p1) //函数形参p1是结构体指针类型
{
printf("请输入年,月,日:");
scanf("%d,%d,%d",p1-year,p1-month,p1-day);
}
在主函数中定义一个结构体变量,调用相关函数,传递变量地址
int main()
{
struct Yearmonthday ymd;
input(ymd); //传递变量地址,以便带回数据
printf("date=%d/%d/%d\n", ymd.year, ymd.month, ymd.day ); //输出结果
return 0;
}