c语言中scanf("%s",&s);与scanf("%s",s);的区别是什么?
前者是把读取的内容放在s指向的地址上,后者是直接放在s这个地址上。如果s是数组,那么没有区别,因为数组本身也是数组首地址的指针
理论上来说,scand接收的参数都应该是指针,这个(些)指针指向需要写入的内存, &则是对变量进行取地址。如果有疑问,你可以试试直接传一个int变量进去,导致的结果就是运行时错误(程序崩溃),因为scanf直接将传入的int变量的值当作需要写入内存的地址,而这种情况下几乎肯定会导致非法内存访问。至于参数是数组时,楼上也说了,当数组s作为参数时会自动转换成指向数组首元素的指针,而&s则得到指向数组起始位置的指针,二者实质上指向同一位置,因此效果上没有区别。
scanf函数是将输入的数据存储到指定的地址中