有关c语言中概念分不清楚

已有定义: char *st="how are you"; 下列程序段中正确的是 (A)
A) char a[11], *p; strcpy(p=a+1,&st[4]);
B) char a[11]; strcpy(++a, st);

C) char a[11]; strcpy(a, st);
D) char a[], *p; strcpy(p=&a[1],st+2);
只从数组名不能自增排除了B,其他该怎么理解呀?求答

若有以下调用语句,则不正确的 fun 函数的首部是 (C)
A) void fun(int m, int x[]) B) void fun(int s, int h[41])
C) void fun(int p, int *s) D) void fun(int n, int a)
main()
{ …
int a[50],n;

fun(n, &a[9]);

}
!
为啥不是D啊?D不是把实参a[9]的地址传递给形参整型a吗,这是可以的吗?
https://img-mid.csdnimg.cn/release/static/image/mid/ask/465428818846138.png

img

已有定义: char *st="how are you"; 下列程序段中正确的是 (A)
A) char a[11], *p; strcpy(p=a+1,&st[4]);

B) char a[11]; strcpy(++a, st); //数组自增

C) char a[11]; strcpy(a, st); //越界

D) char a[], *p; strcpy(p=&a[1],st+2); //非初始化长度为空

第二题,ABC等价,D参数不匹配。