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 );为什么还要有&呀?望高手帮忙解答
C scanf 指针问题
答案:6 悬赏:20
解决时间 2021-02-02 21:25
- 提问者网友:你在我眼中是最帅
- 2021-02-02 00:22
最佳答案
- 二级知识专家网友:承载所有颓废
- 2021-02-02 01:38
第一个scanf("%d",&p->No); scanf函数中()中的%d是你输入的学号信息,&p->No的意思是,把你输入的信息存到p->No(No不是Number的意思么!)这个变量地址里。
第二个scanf("%d",&p->Name);应该是这样写的。你忘记了&,因为sanf 是格式输入函数。这个的意思就是将你输入的学生姓名,存到p->name这个内存地址里。
第二个scanf("%d",&p->Name);应该是这样写的。你忘记了&,因为sanf 是格式输入函数。这个的意思就是将你输入的学生姓名,存到p->name这个内存地址里。
全部回答
- 1楼网友:邪性洒脱
- 2021-02-02 04:29
p 是指针
p->No 不是
所以要
- 2楼网友:心痛成瘾
- 2021-02-02 04:22
&p->No int变量的地址
p->Name string变量首地址
主要是因为变量的类型不同,变量地址的表达形式不一直
typedef struct
{
int No;
string Name;
score Score;
}Information;
typedef struct
{
int math;
int chinese;
int english;
}score;
- 3楼网友:茫然不知崩溃
- 2021-02-02 04:00
虽然p是指针类型,但p->No并不是指针类型,我猜应该是int类型吧
- 4楼网友:深街酒徒
- 2021-02-02 03:41
首先你只要明白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。
- 5楼网友:何以畏孤独
- 2021-02-02 02:06
你的疑惑很简单,写成这样也许会更直观:
scanf ("%d",&(p->No));
若p->No是个int,那么前面当然要加上取地址符了
就如int a; scanf("%d",a);运行时肯定是要出错的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯