关于指针和scanf

假设有如下声明
float rootbeer[10],tings[10][5],*pf,vable=2.2
int i =3
以下语句是错的吗,错在哪?
scanf(“%f”,&rootbeer);

以下是我的想法
rootbeer=&rootbeer[0]

&&rootbeer=&&rootbeer[0]

意思是说如果输入一个数那么他就会错误因为储存的地方应该储存的值是一个地址好比&rootbeer[0],所以就错误吗?

求解求解

 

如果 rootbeer 是指针,scanf(“%f”,&rootbeer);是错的
rootbeer是首元素地址,等于&rootbeer[0] 是scanf函数需要的
&rootbeer是存放首元素地址的地址,等于&&rootbeer[0] 不是scanf函数需要的

但是你 rootbeer 是数组,不是指针
数组地址是固定的,对于数组没有存放地址的地址, &rootbeer实际上是等于rootbeer的,所以,scanf(“%f”,&rootbeer);是没错的

你应该知道,当你定义了一个char[],并且使用%s输入的时候,&是可写可不写的吧
也即是说,对于数组来说,加&和不加&是等价的