scanf()函数中"&"的有关问题

scanf()函数中"&"的问题
scanf( "%f\n ",   &money);

为什么我把scanf()函数中money前面的 "& "去掉后调试时
一直提示我内存不能为written   ?   //这个&是必须的

而为什么在别的语言中变量是可以直接接收输入,例如C#中:
string   s   =   Console.ReadLine();

C中必须要加一个&,这是为什么?

------解决方案--------------------
这就是 C 的低级之处。
在 C 中一个变量名如果出现在 = 的左边,则表示左值,代表一个内存地址。
如果出现在 = 的右边,或者函数参数中时,它是一个右值,代表的是内存里存储的内容。
所以, 在 scanf 中作为参数得到的是 money 的内容,而要把值写进去,scanf 需要一个内存地址。