其实 在当前的编译器中,B和D都是正确的.不过 在最早的ANSI C标准中,不可以用变量来定义数组规模. 也就是说B是不对的.实际上现在的编译器,除了很老版本的,都多少支持了C99或者部分支持,变量定义数组规模也都是合法的.而D, 是定义了一个宏, N是作为常量使用的. 这就是和B中变量n的区别于是在编译时, D被替换为 int a[10]; 自然是合法的了.