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