A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wx_BZhrvVik 中级黑马   /  2015-5-4 18:02  /  1942 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wx_BZhrvVik 于 2015-5-7 14:19 编辑

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

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

为什么一个函数通过写变量名和地址都可以实现

13 个回复

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

十分感谢,明百了,谢谢
回复 使用道具 举报
原来是这样啊。
回复 使用道具 举报
scanf 函数后面确实得跟地址&a,但要是b是指针变量名,就可以直接用b,因为指针名代表变量的地址,如果是数组的话,代表的是,首元素的地址,
回复 使用道具 举报
顶一楼 很清楚
回复 使用道具 举报
lcx 发表于 2015-5-4 20:09
&a得到的是a的内存地址如果a本身就是个指针变量就可以不用写&。
但是指针一定要指向内存,如果&a里面没有指 ...

只要int  *a = &b;应该就不会报错了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马