中易网

C scanf 指针问题

答案:6  悬赏:20  
解决时间 2021-02-02 21:25
void GetInfo( Information *p )
{
printf("请输入一位学生的信息:\n");
printf("学号:");
scanf("%d",&p->No );
printf("姓名:");
scanf("%s",p->Name);
printf("%s的三门主课成绩(数学,语文,英语)是: \n",p->Name);
scanf("%d, %d, %d",&(p->Score.math), &(p->Score.chinese), &(p->Score.english) );
}
这个函数形参既然是指针类型,scanf("%d",&p->No );为什么还要有&呀?望高手帮忙解答
最佳答案
第一个scanf("%d",&p->No); scanf函数中()中的%d是你输入的学号信息,&p->No的意思是,把你输入的信息存到p->No(No不是Number的意思么!)这个变量地址里。
第二个scanf("%d",&p->Name);应该是这样写的。你忘记了&,因为sanf 是格式输入函数。这个的意思就是将你输入的学生姓名,存到p->name这个内存地址里。
全部回答
p 是指针 p->No 不是 所以要
&p->No int变量的地址 p->Name string变量首地址 主要是因为变量的类型不同,变量地址的表达形式不一直 typedef struct { int No; string Name; score Score; }Information; typedef struct { int math; int chinese; int english; }score;
虽然p是指针类型,但p->No并不是指针类型,我猜应该是int类型吧
首先你只要明白scanf语句中要传的是地址就可以,具体的底层实现你不用管。 关于指针,你要知道一个指针类型的变量指向的是一个地址,比如定义一个指针,指向你家的地址,不管你家的房子怎么装修,我只要照着我的地址去找还是能找到你这个房子,假如我修改了这个地址指向的变量,也就是我把你家地址上的建筑给改变了,那你家的房子当然就变了。 如果你不好理解的话就记住,‘*’和‘&’这两个符号假如紧挨着就抵消,其中一个符号移动到‘=’的另一边就变成另一个符号。举个例子*(&a)其实就是a,*p = a其实就是p = &a。这个小技巧只适合做选择题什么的,底层实现并不是这样。 然后题中,p是一个指向long类型的指针,a是一个long类型变量。 先看a,*p是一个long类型变量,&a是地址,不能把地址赋给变量,a错。 再看b,malloc分配了一个8字节的空间,然后转换成指向long类型的指针,然后让p指向这块内存,然后p很显然是一个地址,scanf里传的就是地址,所以b对。 再看c,p=&a的结果就是p,是一个地址类型,c对。 最后看d,&a是地址类型,d对。 然后这个题是选不正确的,那答案就是a。
你的疑惑很简单,写成这样也许会更直观: scanf ("%d",&(p->No)); 若p->No是个int,那么前面当然要加上取地址符了 就如int a; scanf("%d",a);运行时肯定是要出错的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
男朋友比我大5岁,我们谈了2年多,他家里很着
明镁科技地址在哪,我要去那里办事
亨达百货这个地址在什么地方,我要处理点事
广州市人口福利基金会在哪里啊,我有事要去这
中考体检是不是要全脱光???我这里是苏州
一款单机手机答题游戏,我安卓系统的
南漳县春苑米业有限公司地址在哪,我要去那里
国风大酒店地址在哪,我要去那里办事
大伟摩托修理(华庆路)怎么去啊,有知道地址的
一心堂元江甘庄连锁店在哪里啊,我有事要去这
机油有哪些品牌是顶尖的?
一品鲜牛地址有知道的么?有点事想过去
《仙剑奇侠传98柔情版的错误如何解决》相关问
中国移动(宏发业务代办处店)地址在哪,我要去
写的小说打算换个网站(在之前那网站没有签约)
推荐资讯
天上的云分为什么种类
金都养生会馆我想知道这个在什么地方
2015年11月25号从温州飞往宜昌的机票是多少钱
我自己在网上查询的征信,我没有结婚,但是查
木头营子中心卫生院地址在什么地方,想过去办
我时常深深的怀着感激之情,思念我的启蒙老师
急!公司章程修正案及申请变更登记
deseno拉杆箱的产地
洛阳市中医妇科研究所在什么地方啊,我要过去
bobbi brown粉底色号
point to 和point at 有什么区别
鼎盛装饰设计有限公司我想知道这个在什么地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?