黑马程序员技术交流社区

标题: scanf的问题 [打印本页]

作者: wx_BZhrvVik    时间: 2015-5-4 18:02
标题: scanf的问题
本帖最后由 wx_BZhrvVik 于 2015-5-7 14:19 编辑

我记得原来学C语言的时候需要写入变量的地址
scanf("%c",&a);

最近在论坛里看很多人都直接用了变量名
scanf("%c",a);

为什么一个函数通过写变量名和地址都可以实现
作者: lcx    时间: 2015-5-4 20:09
&a得到的是a的内存地址如果a本身就是个指针变量就可以不用写&。
但是指针一定要指向内存,如果&a里面没有指向对象就会出错。
如:
char b;
char *a=b;//省略这一步会出错,因为a没有指向内存空间。
scanf("%c",a);//这个时候可以直接用a因为a是指针变量,他指向一个内存空。将用户输入的一个字符赋值给a指向的内存空间。
给善于提问和热心解答的人加两技术分吧。
作者: shenxian88    时间: 2015-5-4 21:18
如果a代表的是一个指针的话可以这样做,例如a是数组名
楼上的人分析很到位
作者: Theshy    时间: 2015-5-4 21:37
scanf 后跟的是地址
&a 是取a的地址
若a为指针变量  存储的就是地址   可以直接用a        
作者: zy18692243338    时间: 2015-5-4 21:57
和java有什么却别,求大神解答
作者: olove    时间: 2015-5-4 23:07
如果a为指针变量你可以像第二种方式写,若a是普通变量,一个变量的地址可以通过&a得到,不使用就会报错;
对于使用scanf还有注意点,对于使用混合整型,或者混合字符型的时候,一定注意吸收掉内存中存留的多余空格,不然会得到错误的答案。
作者: 逆流瞅瞅    时间: 2015-5-4 23:44
顶一楼。
作者: ydy96315    时间: 2015-5-5 07:05
主要是a是不是地址
作者: HHE_johnson    时间: 2015-5-5 08:05
一楼分析很透彻
作者: wx_BZhrvVik    时间: 2015-5-7 14:16
lcx 发表于 2015-5-4 20:09
&a得到的是a的内存地址如果a本身就是个指针变量就可以不用写&。
但是指针一定要指向内存,如果&a里面没有指 ...

十分感谢,明百了,谢谢
作者: x331275955    时间: 2015-5-8 23:46
原来是这样啊。
作者: ambition    时间: 2015-5-12 07:56
scanf 函数后面确实得跟地址&a,但要是b是指针变量名,就可以直接用b,因为指针名代表变量的地址,如果是数组的话,代表的是,首元素的地址,
作者: welfarezhang    时间: 2015-5-12 09:02
顶一楼 很清楚
作者: 星空眼泪    时间: 2015-5-12 09:09
lcx 发表于 2015-5-4 20:09
&a得到的是a的内存地址如果a本身就是个指针变量就可以不用写&。
但是指针一定要指向内存,如果&a里面没有指 ...

只要int  *a = &b;应该就不会报错了吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2