第16题  在C语言中,下列声明中错误的是

­      A  char  ∗c1,  c2 = ′x′,  c3;

­      B  float  a[10.5];

­      C  int  arr[5 + 6];

­      D  double  array[5 ∗ 6];

答案  B

解析

考查各种声明的语法格式。

A正确,声明c1为字符型指针变量、无初值,声明c2为字符型变量、初值为′x′,声明c3为字符型变量、无初值

B错误,方括号内必须是整型常量表达式,不允许含有小数点

C正确,声明arr为整型数组变量,共含有11个元素

D正确,声明array为双精度浮点型数组变量,共含有30个元素

知识点

① 指针变量的声明格式

­        类型名    ∗指针变量名;

例如:

­        int   ∗p,∗q;

声明p、q均为整型指针变量

② 数组变量的声明格式

­        类型名    数组变量名 [ 整型常量表达式 ];

其中:整型常量表达式的值必须大于0,指定数组元素的个数

例如:

­        int   a[10],b[4+5],c[10∗2];

声明a、b、c均为整型数组,分别含有10、9、20个元素

③ 数组的起始下标只能为0。

练习题

试为自己设计一道孪生题,举一反三。

孪生题1  在C语言中,下列声明中错误的是

­      A  char  ∗c1,  c2 = ′x′,  c3;

­      B  float  a[0];

­      C  int  arr[5 + 6];

­      D  double  array[5 ∗ 6];

答案  B

解析  方括号内整型常量表达式的值必须大于0

孪生题2  在C语言中,下列选项中错误的是

­      A  char  ∗c1,  c2 = ′x′,  c3;

­      B  数组的起始下标允许为负数

­      C  int  arr[50];

­      D  double  array[5 ∗ 6];

答案  B

解析  数组的起始下标只能为0

孪生题3  设有函数声明如下:

­      int   fun(double  a[ ],char  ∗p);

则下列选项中正确的是

­      A  形参a、p都是指针变量

­      B  参数传递时,形参变量a按值传送地址,形参变量p按地址传送数值

­      C  参数传递时,实参数组的全体元素均被复制到形参数组a

­      D  形参a既是数组名,也是指针变量

答案  A

解析

在函数形参声明中,double  a[ ]等价于double  ∗a,声明a为指针变量,并非数组名,因此A正确,D错误。

在C语言中,参数传递只有一种,即按值传递,就是把实参表达式的值复制(拷贝)到对应形参变量之中。对于数组,先把实参数组名自动转换为指向首元素的地址,再把该地址复制到对应形参指针变量中,根本不会复制数组元素的值。因此B、C错误。

返回