题目
如下3组数组的定义都是正确的。int a[5]; #define x 5 int a[x] ;intx=5;int a[x] ;A,正确B,错误
如下3组数组的定义都是正确的。
int a[5];
#define x 5
int a[x] ;
intx=5;
int a[x] ;
A,正确
B,错误
题目解答
答案
第一组数组定义 int a[5]; 是正确的,它明确指定了数组的大小为 5。
第二组定义使用了宏定义 #define x 5,然后使用 int a[x]; 来定义数组。这种方式在一些情况下可能会工作,但它不是标准的 C 语言语法,不被所有的编译器都支持。
第三组定义中,先定义了一个整数变量 x 并赋值为 5,然后试图使用 int a[x]; 来定义数组。这也是不正确的,因为数组大小应该是一个常量[1]表达式,而不是变量。
在 C 语言中,数组的大小必须在编译时[2]是已知的常量。
答案选择为B.
解析
考查要点:本题主要考查C语言中数组定义的规则,特别是数组大小的合法性要求。
核心思路:在标准C语言中,数组的大小必须是编译时已知的常量表达式,不能是变量或通过宏替换得到的值。
关键点:
- 常量表达式:数组大小必须是整数常量(如
int a[5];)。 - 宏替换的局限性:
#define x 5后,int a[x];中的x仍被视为标识符,而非常量。 - 变量的不可用性:用变量
int x=5; int a[x];定义数组在标准C中不被允许(除非使用C99的变长数组,但题目默认不支持)。
第一组:int a[5];
- 合法性:正确。
- 原因:直接指定了数组大小为整数常量
5,符合标准C语言的要求。
第二组:#define x 5 + int a[x];
- 合法性:错误。
- 原因:虽然宏展开后
x变为5,但x在语法上仍是一个标识符,而非整数常量。标准C要求数组大小必须是编译时确定的常量表达式,而宏替换无法满足这一要求。
第三组:int x=5; + int a[x];
- 合法性:错误。
- 原因:数组大小不能是变量
x。即使x被赋值为5,它仍然是一个运行时变量,而标准C要求数组大小必须在编译时确定。