define是预处理的,编译时SIZE会被替换成10,所以int a[SIZE] 等于 int a[10]
至于其他为什么错。因为用变量声明数组size是不行的
#define SIZE 10 确实不用加分号。