C语言的一道问题求解答。?

假设有如下声明:
float rootbeer[10], things[10][5], *pf, value = 2.2;
int i = 3;
则下列语句中哪些是正确的,哪些是错误的?
a. rootbeer[2] = value;
b. scanf ("%f", &rootbeer);
c. rootbeer = value;
d. printf ("%f", rootbeer);
e. things[4] [4] = rootbeer[3];
f. things[5] = rootbeer;
g. pf = value;
h. pf = rootbeer;
解释一下为什么bcd是错误的,而且正确的形式是什么

b选项

因为rootbeer是数组,数组的标识符rootbeer本身就是一个指针,该指针指向的事整个数组空间第一个元素的首地址
因此scanf()的时候,不需要添加地址符,直接scanf ("%f", rootbeer);即可。

c选项

同理,因为rootbeer本身就是一个指针,一个指针怎么能直接接受一个value变量的值呢!
要么就是:

     rootbeer[0] = value;  //将值直接给第一个元素

要么就是:

     rootbeer = &value   //将value的值得地址给rootbeer

d选项

还是同理,rootbeer是指针,直接printf ("%f", rootbeer);
输出的事该指针的值,也就是第一个数组元素的首地址
地址是整形,

    printf ("%d", rootbeer)

将输出类似于6758568的值;

rootbeer是一个数组,rootbeer[n]才是具体的值

a. rootbeer[2] = value; // 正确
b. scanf (“%f”, &rootbeer); // 错误,应该是scanf (“%f”, &rootbeer[0]);
c. rootbeer = value; // 错误,不能将一个值赋给数组名
d. printf (“%f”, rootbeer); // 错误,应该是printf (“%f”, rootbeer[2]);
e. things[4] [4] = rootbeer[3]; // 正确
f. things[5] = rootbeer; // 错误,应该是things[5][0] = rootbeer[0];
g. pf = value; // 错误,不能将一个值赋给指针变量
h. pf = rootbeer; // 正确