搜索
查看: 977|回复: 12
打印 上一主题 下一主题

关于scanf的&

[复制链接]
跳转到指定楼层
楼主
发表于 2016-8-28 13:07:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大神勿喷,不过这个论坛没什么大神
我就是想告诉大家,为什么scanf要在变量名前面加上&呢
大家想想scanf的作用、printf和scanf的区别就能明白了
printf是把变量的值打印在输出端,也就是输出。他不用管我该在哪里找变量,他只需要你告诉他一个值,然后把这个值输送给屏幕。
scanf是是从输入端读入值,然后把它存储到变量里,那么我们为了把一个值存储在变量里,我们不用管这个变量以前有什么东西,然而我们需要告诉他在哪里存储输入的东西,这个“在哪里存储”的“哪里”就是地址。
&符号在变量前面使用的时候代表取得这个变量的地址,所以我们需要在scanf中告诉scanf一个地址。
/*****************************************************************/
为什么我们不能直接写变量名呢?
这个和C语言的函数传值有关系。C语言调用函数传递参数时,不是把实际参数的所有信息传给函数,而是只把里面存储的值传给函数。所以我们可以在调用函数的时候写上表达式,比如说printf("%d",a+b);a+b就是表达式,C语言把这个表达式的值给了形式参数
/*****************************************************************/
为什么直接写变量名会崩溃呢?
你懂得,scanf需要你传入地址,然而你传入的是值,scanf缺不这么认为,他会认为你传入的是地址。于是,他把你传入的东西当做地址看待,CPU执行指令的时候通过地址线找到内存中的对应位置,然后往里面存数。结果访问了不该访问的地址,造成崩溃

推荐
发表于 2016-8-28 13:29:56 | 只看该作者

回帖奖励 +3

操作系统的保护机制  
沙发
发表于 2016-8-28 13:19:01 | 只看该作者
额                                                                                          
板凳
发表于 2016-8-28 13:19:22 | 只看该作者

回帖奖励 +3

没中                                                            
地板
发表于 2016-8-28 13:19:44 | 只看该作者
我收回刚才的话                           
6#
 楼主| 发表于 2016-8-28 13:47:11 | 只看该作者
4399APPLE 发表于 2016-8-28 13:29
操作系统的保护机制

恩,是的,就是由于这个机制会报错
7#
发表于 2016-8-28 13:59:37 | 只看该作者
所以当参数是数组名不用&,因为数组名本身就指向首元素的地址
8#
发表于 2016-8-28 18:38:17 | 只看该作者

回帖奖励 +3

我认为是因为:scanf函数需要一个指针类型的变量
9#
发表于 2016-9-2 11:36:30 | 只看该作者
还有啊哈币吗?。。。
10#
发表于 2016-9-2 11:36:54 | 只看该作者
e。。。。。。。。。。。。。。。。。。。。。。。
11#
发表于 2016-9-2 11:37:15 | 只看该作者
。。。。。。。。。。。。。。。。。。。。
12#
 楼主| 发表于 2016-9-3 16:18:12 | 只看该作者
zhuzhu81998 发表于 2016-9-2 11:36
还有啊哈币吗?。。。

没了吧[/strong]
13#
发表于 2016-9-4 15:06:09 | 只看该作者

你不地道..................................
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表