单选题
1、第63题 (1.0分) 题号:524 与实际参数为实型数组名相对应的形式参数不可以定义为()。
A
float a[];
B
float *a;
C
float a;
D
float (*a)[3];
答案解析
正确答案:C
解析:
### 题目解析
**正确答案:C**
#### 1. 核心考点
本题主要考查 C 语言中**数组名作为函数参数传递时的机制**,以及**形式参数(形参)与实在参数(实参)的类型匹配规则**。
在 C 语言中,当数组名作为实参传递给函数时,实际上传递的是**数组首元素的地址**(即指针)。因此,对应的形参必须能够接收这个地址。
#### 2. 选项逐一分析
* **A. `float a[];`**
* **分析**:在函数参数列表中,`float a[]` 等价于 `float *a`。它表示 `a` 是一个指向 `float` 类型数据的指针。
* **结论**:可以接收实型数组名(即首地址),**合法**。
* **B. `float *a;`**
* **分析`**:明确声明 `a` 是一个指向 `float` 类型的指针。数组名退化为指向其第一个元素的指针,类型完全匹配。
* **结论**:可以接收实型数组名,**合法**。
* **C. `float a;`
* **分析**这里声明 `a` 是一个普通的**浮点型变量**,而不是指针或数组。
* **冲突点**:实参传递的是“地址”(指针类型),而形参期望的是“值”(float 类型)。C 语言中不能直接将一个指针赋值给一个非指针的基本数据类型变量(除非进行强制类型转换,但这会导致逻辑错误且通常编译器会报错或警告类型不兼容)。更重要的是,语义上完全不通:你不能用一个标量变量去接收一个数组的起始地址来进行数组操作。
* **结论**:类型不匹配,**不可以**定义为该形式。
* **D. `float (*a)[3];`**
* **分析**:这是一个**数组指针**,指向一个包含 3 个 `float` 元素的一维数组。
* **特殊情况说明**:虽然通常一维数组名对应的是 `float *`,但如果实参是二维数组的行名,或者在某些特定语境下(如指向数组的指针),这种定义在语法上是用于接收地址的。
* **对比排除**:题目问的是“不可以定义为”。相比之下,C 选项是绝对错误的类型不匹配(指针 vs 标量)。D 选项至少是一个指针类型,能够接收地址。*注:严格来说,如果实参是一维数组名 `float arr[10]`,传给 `float (*a)[3]` 也会类型不兼容(`float*` vs `float(*)[3]`),但在单选题中,C 选项的错误是最根本、最明显的(类型类别都不同:指针型 vs 基本数据类型)。通常这类题目中,D 选项可能暗示实参是某种特定结构的数组,或者出题意图在于区分“指针/数组形参”与“普通变量形参”。但在标准一维数组传参语境下,C 是绝对错误的,因为它是非指针类型。*
* **更严谨的解释**:题目问的是“与实际参数为实型数组名相对应”。
* 若实参是 `float arr[10]`,传参时退化爲 `float*`。
* A (`float[]`) -> `float*`,匹配。
* B (`float*`) -> `float*`,匹配。
* D (`float(*)[3]`) -> 这是指向数组的指针。如果实参是二维数组 `float arr[2][3]`,调用时传 `arr` (类型 `float(*)[3]`),则 D 是匹配的。如果实参是一维数组,D 不匹配。
* C (`float`) -> 基本类型,永远无法匹配数组名(地址)。
* 因此,无论实参是一维还是多维数组名,它本质上都是一个**地址**。C 选项不是指针类型,无法接收地址。所以 C 是绝对不可以的。
#### 3. 总结
数组名作实参时,传递的是**地址**。因此,形参必须是**指针**或**数组**形式。
* `float a[]` 和 `float *a` 都是指针形式,合法。
* `float (*a)[3]` 也是指针形式(数组指针),在特定数组维度下合法。
* `float a` 是普通变量,不能接收地址,**非法**。
故答案选 **C**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第196题 (1.0分) 题号:519 int a[10]; 给数组a的所有元素分别赋值为1、2、3、……的语句是()。
单选题
1、第195题 (1.0分) 题号:168 若输入ab,程序运行结果为()。
单选题
1、第194题 (1.0分) 题号:549 若有double *p,x[10];int i=5;使指针变量p指向元素x[5]的语句为()。
单选题
1、第193题 (1.0分) 题号:120 假设所有变量均为整型,表达式:a=2,b=5,a>b?a++:b++,a+b的值 是()。
单选题
1、第192题 (1.0分) 题号:138 以下程序的输出结果是()。
单选题
1、第191题 (1.0分) 题号:641 若有说明:int a[10];则对a数组元素的正确引用是()。
单选题
1、第190题 (1.0分) 题号:696 设 int b=2;表达式(b>>2)/(b>>1)的值是()。
单选题
1、第189题 (1.0分) 题号:724 若调用fputc函数输出字符成功,则其返回值是()。
单选题
1、第188题 (1.0分) 题号:159 下列程序的输出为()。
单选题
1、第187题 (1.0分) 题号:722 利用 fseek 函数可以实现的操作是()。
