中易网

结构体指针 分配空间

答案:2  悬赏:60  
解决时间 2021-02-03 09:39
#include
#include
struct data
{
int day,month,year;
};
struct stu
{
char name[2];
long num;
struct data birthday;
};
main()
{
struct stu *student;
student=(malloc(sizeof(struct stu)));//就是这句有问题,却不知道哪里有问题,和书上的一样啊
scanf("%s",student->name);
scanf("%ld",&student->num);//为什么这里有&,上面一行木有,有什么区别吗
scanf("%d %d %d",&student->birthday.year,&student->birthday.month,&student->birthday.day);//这里不用&有木有关系
printf("\n");
printf("%20s %10ld %d %d %d",student->name,student->num,student->birthday.year,student->birthday.month,student->birthday.day);
}
新手上路,请多多帮忙啊!多谢啦!!
最佳答案
student=(malloc(sizeof(struct stu)));//就是这句有问题,却不知道哪里有问题,和书上的一样啊
malloc出的地址要做一个类型转换。
student = (struct stu *) malloc( sizeof( struct stu));

scanf("%ld",&student->num);//为什么这里有&,上面一行木有,有什么区别吗
上一行name是数组,数组名代表这个数组的首地址。所以已经是地址了。
而num是long型的。所以要取num的地址.

scanf("%d %d %d",&student->birthday.year,&student->birthday.month,&student->birthday.day);//这里不用&有木有关系
必须要&,&这个符号表示取变量的地址。理由和上一条差不多。
全部回答
假设有以下代码: listnodeptr s; *listnodeptr p=&s; **listnodeptr pp=&p; 假设listnodeptr s在内存中存放的地址为1000,p指向s,pp指向p,示意如下: 1000:s的内容 1005:p的内容=1000 1009:pp的内容=1005 即s的地址是1000,代表结构体的内存位置;p的地址是1005,p的值为1000指向s;pp的地址是1009,p的值为1005指向p(即指针的指针)。 故: 1. listnodeptr s:s就是结构体的代表,并不是结构体指针,p才是结构体指针; 2. *listnodeptr s:这里s才是结构体指针; 3. 传参时,用function_2(&s)或function_2(*s)可直接在函数中访问原结构体内容;用function_1(s)则会将结构体复制一份压到参数栈中,函数中访问的是复制的副本。看实际需要使用。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
哪些作物的种植能用到滴灌带?
白城市镇赉野生灶台鱼我想知道这个在什么地方
养缅甸陆龟 龟箱里只有一个灯管接口和一个灯
求PSP数码宝贝:大冒险完美存档!注意是大冒
房间有癞蛤蟆撵不走是怎么回事
冀jl8887这辆车是谁的
渚是哪部动漫的
介不介意你男朋友叫你最好的闺蜜,叫媳妇
你好我问等额本息怎么提前还款划算’
偌虹时尚元素我想知道这个在什么地方
福田皮卡,车门锁,车窗,仪表台全部不通电了
现代瑞纳更换气囊电脑需要在线匹配吗
计算机二级Office考了三次了还是没过,我该怎
天府小吃城在什么地方啊,我要过去处理事情
用java编程俄罗斯方块,游戏主界面用什么类,
推荐资讯
获得选择的大学的入学资格英文
前进烩面馆地址有知道的么?有点事想过去
学美容培训大概需要多长时间能学会
莱滨商务宾馆怎么去啊,有知道地址的么
深圳湾公园海里有大鲨鱼吗
我恨你 用英语怎么说?
天英宝鼎花苑地址在哪,我要去那里办事
变频空调制冷剂有几种
李久全中西医诊所这个地址在什么地方,我要处
电脑风箱很响时怎么回事?
50%亚麻50%毛料的和75%化纤25%毛料的西服哪个
兄弟饭庄地址有知道的么?有点事想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?